2017-08-11 8 views
0

J'essaie d'implémenter le style de balayage de cartes Koloda. J'ai créé un fichier .xib structuré en Image 1 & 2. xib file structureImpossible de connecter IBOutlet au fichier XIB

Comme vous pouvez le voir dans l'image 1, j'ai défini le propriétaire du fichier comme la classe personnalisée des fichiers XIB.

Dans l'image 2, j'ai laissé le blanc classe (pas sûr si cela est correct)

Ma classe NIB est par le code ci-dessous.

import UIKit 
import Koloda 

class CardView: KolodaView { 

var view: UIView! 
var nibName: String = "CardView" 
var uid: String! 

@IBOutlet weak var profileImage: UIImageView! 
@IBOutlet weak var nameLabel: UILabel! 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    setUp() 
} 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    setUp() 
} 

func setUp() { 

    view = loadViewFromNib() 

    view.frame = bounds 
    view.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
    view.isUserInteractionEnabled = true 
    addSubview(view) 

} 

func loadViewFromNib() -> UIView { 
    let bundle = Bundle(for: CardView.self) 
    let nib = UINib(nibName: String(describing: CardView.self), bundle: bundle) 
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView 

    return view 
} 
} 

Dans mon contrôleur, j'ai la vue pour l'index comme ci-dessous; Je ne peux pas insérer mes IBOutlets et les référencer dans mon UIViewController. Comme j'obtiendrai des informations de FirDatabase & de geoFire et remplissant les vues. Je comprends que cela a quelque chose à voir avec le propriétaire du fichier. Je ne suis pas sûr sur la façon de définir les IBOutlets à la sous-vue au lieu de la classe personnalisée.

Toute aide appréciée.

+0

Pourquoi voudriez-vous laisser 'méthode koloda' pour renvoie une 'UIView' puisque vous visez à obtenir un 'CardView'? –

+0

Première chose que je devine que CardView est la vue XIB. Et setUp() ne doit pas être appelé explicitement car CardView sera ajouté sur lui-même (récursivité lors de l'initialisation de la vue). Et en supposant que vous voulez que les sorties d'étiquette de xib au contrôleur de vue lui-même, vous devez changer le propriétaire du fichier pour le contrôleur de vue où vous voulez la prise. – snjmhj

+0

@snjmhj C'est correct. Je crois que les prises doivent être ajoutées à la classe CardView et non au ViewController. –

Répondre

0

Enfin après les heures de bricoler.

  1. La classe est maintenant;

    import UIKit 
    
    class CardView: UIView { 
    
    var uid: String! 
    
    @IBOutlet weak var profileImage: UIImageView! 
    @IBOutlet weak var nameLabel: UILabel! 
    
    } 
    
  2. Fichier supprimé propriétaire

  3. dans xib est Vignettes maintenant réglé sur
  4. Vignettes

  5. viewForCardAt est maintenant;

    func koloda(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView { 
    
    let bundle = Bundle(for: CardView.self) 
    let nib = UINib(nibName: String(describing: CardView.self), bundle: bundle) 
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! CardView 
    
    let users = userResults[Int(index)] 
    
    view.profileImage.sd_setImage(with: URL(string: users.userProfileURL)) 
    view.nameLabel.text = users.userName 
    view.uid = users.uid 
    
    return view 
    

    }

J'ai maintenant un travail "Carte amadou avec géolocaliser" :)

0

Définissez la classe à Vignettes de classe Vignettes personnalisée au lieu de UIView

+0

Si je change loadViewFromNib - laisse view = nib.instantiate (withOwner: self, options: nil) [0] as! UIView pour laisser voir = nib.instantiate (withOwner: self, options: nil) [0] as! CardView et le même dans - viewForCardAtIndex Je reçois erreur (Impossible de lancer la valeur de type 'UIView') –