2017-06-02 1 views
2

Was ich getan habe ist:Kann nicht meine benutzerdefinierte UIView Unterklasse von XIB der Klasse geworfen wurden ich brauche (nur UIView)

1) Erstellt eine .xib Datei TranslationInfoWindow.xib:

xib file for the info window

2 Erstellt) TranslationInfoWindow.swift Datei mit dem Folge Inhalt:

import UIKit 

class TranslationInfoWindow: UIView { 

    // MARK: - Initializers 

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

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

    // MARK: - Private Helper Methods 

    // Performs the initial setup. 
    private func setupView() { 
     let view = viewFromNibForClass() 
     view.frame = bounds 

     // Auto-layout stuff. 
     view.autoresizingMask = [ 
      UIViewAutoresizing.flexibleWidth, 
      UIViewAutoresizing.flexibleHeight 
     ] 

     // Show the view. 
     addSubview(view) 
    } 

    // Loads a XIB file into a view and returns this view. 
    private func viewFromNibForClass() -> UIView { 
     let bundle = Bundle(for: type(of: self)) 
     let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle) 
     let view = nib.instantiate(withOwner: self, options: nil).first as! UIView 

     return view 
    } 

    @IBOutlet weak var avatarImageView: RoundedImageView! 
    @IBOutlet weak var titleLabel: UILabel! 
    @IBOutlet weak var usersLabel: UILabel! 
} 

3) Hier versuche ich meine benutzerdefinierte Ansicht zu initialisieren:

func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? { 
    //    FIXME: There is a UIView but it doesn't want to be casted in TranslationInfoWindow 
    if let infoWindow = Bundle.main.loadNibNamed(
     "TranslationInfoWindow", owner: view, options: nil)?.first as? TranslationInfoWindow { 
     return infoWindow 
    } else { 
     return nil 
    } 
} 

Nun, wenn ich versuche, das Projekt, das ich den folgenden Fehler haben zu laufen: My error

Was mache ich falsch?


UPDATE:

Hier ist die Hierarchie der xib: enter image description here

+0

Bitte posten Sie einen Screenshot, wie Ihr xib-Baum aussieht. Überprüfen Sie auch, ob das Problem tatsächlich die Besetzung ist –

+0

Zeigen Sie die Fehlermeldung in der Konsole, wenn Sie eine haben. Else, log (die Klasse) von 'let view = nib.instantiate (withOwner: self, Optionen: nil) .first' – Larme

+0

@FernandoMazzon hinzugefügt die Hierarchie von xib – Legonaftik

Antwort

1

In Interface Builder, haben Sie die Klassennamen im Identity Inspector ändern (3.vl) Registerkarte von UIView zu Ihrem benutzerdefinierten Klassenname? screen grab of IB

+0

Nur für "File'sOwner", nicht "View" – Legonaftik

+0

Versuchen Sie, den Namen Ihrer benutzerdefinierten Klasse als Wert hier festzulegen. Ich glaube, das ist das fehlende Stück. – HammondSuisse

+0

bist du sicher? Ich habe niemanden gesehen, der empfehlen würde, dort eine benutzerdefinierte Klasse zu setzen. – Legonaftik

0

Sie sollten die richtige Klasse von TranslationInfoWindow.xib als Typ TranslationInfoWindow in IB festlegen.

+0

Es ist bereits gesetzt – Legonaftik

+0

Versuchen Sie, die Nibs zu durchlaufen, und wählen Sie die richtige, wenn der Typ der gleiche wie Ihre Klasse ist ... statt die erste zu wählen. – ovidiur

Verwandte Themen