Wie überschreibe ich die Eigenschaft "view" in UIViewController?
Habe ich eine benutzerdefinierte UIViewController und benutzerdefinierte UIView. Ich möchte das überschreiben der viewcontroller.view Eigenschaft zurück, MyCustomUIView.
Jetzt habe ich:
@interface MyViewController : UIViewController {
IBOutlet MyView* view;
}
@property (nonatomic, retain) IBOutlet MyView* view;
Dieser kompiliert, aber ich bekomme eine Warnung: die Eigenschaft 'view' - Typ stimmt nicht überein super-Klasse 'UIViewController' - Eigenschaft Art.
Wie kann ich lindern diese Warnung?
Kommentar zu dem Problem
Ich denke, Sie sollten eher mit
@dynamic
. Bitte Lesen Sie diese Frage, die Antworten waren wirklich hilfreich für mich 🙂 Es ist sehr schönen Artikel mit dem Titel Überschreiben von UIViewController die View-Eigenschaft, Richtig Gemacht.
InformationsquelleAutor der Frage Keith Fitzgerald | 2009-03-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die kurze Antwort ist, dass Sie nicht. Der Grund dafür ist, dass die Eigenschaften sind wirklich nur Methoden, und wenn Sie versuchen, ändern Sie den Rückgabetyp, erhalten Sie diese:
Objective-C hat nicht ermöglichen Rückgabetyp Kovarianz.
Was Sie tun können, ist fügen Sie eine neue Eigenschaft "myView", und machen es einfach typecast "Ansicht" - Eigenschaft. Dies wird zu lindern Typumwandlungen im gesamten code. Geben Sie einfach Ihre anzeigen Unterklasse der view-Eigenschaft, und alles sollte funktionieren.
InformationsquelleAutor der Antwort NilObject
@lpaul7 bereits einen link gepostet, Travis Jeffery im blog als Kommentar, aber es ist so viel mehr richtig, als alle anderen Antworten, die es wirklich braucht den code, um eine Antwort:
ViewController.h:
ViewController.m:
Wenn Sie mit einem xib, statt überschreiben
loadView
ändern Sie den Typ der view-controller der root-Ansicht und fügen SieIBOutlet
um die Immobilie.Sehen Überschreiben von UIViewController die View-Eigenschaft, Richtig Gemacht für mehr details.
InformationsquelleAutor der Antwort JosephH
Den UIViewController die view-Eigenschaft/Methode wird Rückkehr Ihre anzeigen automatisch. Ich denke, Sie müssen nur gegossen das Ergebnis MyView (oder einfach den id-Typ):
Ich denke, dass der code, den Sie oben gepostet hast wird die Ursache, die Sie beunruhigen. Sie wahrscheinlich nicht wollen, eine Ansicht zu erstellen Mitglied selbst (weil dann die Steuerung die Speicherung von 2 Ansichten, und könnte nicht verwenden Sie die richtige intern) oder überschreiben Sie die view-Eigenschaft (weil UIViewController besitzt eine Besondere Behandlung für Sie.) (Siehe diese Frage für weitere Informationen über die letztere.)
InformationsquelleAutor der Antwort Jesse Rusak
Sorry, aber deine Antwort ist falsch.
Den richtigen Umsetzung wäre dies zu fügen Sie eine @ - Eigenschaft, um die header-Datei mit Ihrer Rückkehr geben.
Dann anstelle von @synthetisieren, die Sie hinzufügen, die getter-und setter-manuell und geben Sie einen cast geben von [super view]
beispielsweise in meiner Klasse ist ein PlayerViewController
PlayerViewController.h
PlayerViewController.m
das wichtigste ist, die richtige Klasse in der Ansicht.
Indem ein UIView, wo ein PlayerView geht, würden wahrscheinlich die Arbeit im Interface Builder, aber wäre das nicht korrekt in den code.
Ich bin derzeit mit dieser Implementierung.
InformationsquelleAutor der Antwort The Lazy Coder
Wenn jemand auf Swift 2.0+ verwenden, können Sie Protokoll-Erweiterungen für eine wiederverwendbare Implementierung:
InformationsquelleAutor der Antwort Mazyod