Ich habe eine benutzerdefinierte UITableViewController-Unterklasse, die ich an zwei Stellen in einer NIB-Datei verwende. Was soll ich tun, wenn ich möchte, dass die beiden Instanzen ein leicht unterschiedliches Verhalten haben? Natürlich kann ich im Code eine Art von Verhalten oder die andere basierend auf dem Wert eines BOOLs auswählen, aber wie setze ich dieses BOOL aus dem Interface Builder, ohne ein Interface Builder Plugin schreiben zu müssen?Festlegen einer Eigenschaft für ein benutzerdefiniertes Objekt über Interface Builder
Antwort
Haben zwei Unterklassen ist wahrscheinlich einfacher, und wird einfacher zu dokumentieren.
Soweit ich weiß, können Sie keine Parameter in IB einstellen, ohne ein IB Plugin zu schreiben.
Das heißt, Sie haben zwei andere Optionen.
Wenn es so einfach wie ein einzelnes BOOL ist, sind Sie wahrscheinlich am besten aus es eine Eigenschaft der MyCustomViewController
Klasse machen und setzen Sie es in Code, nachdem Sie init:
customViewController = [[MyCustomViewController alloc]initWithNibName:@"CustomViewController" bundle:nil];
[customViewController setFunky:YES];
Die andere Option ist zu erstellen ein Protokoll für eine MyCustomViewDelegate
. Wenn Sie nicht vertraut mit den Protokollen sind, dann wäre Ihr Header wie folgt aussehen:
@class MyCustomViewController;
@protocol MyCustomViewDelegate
@required
-(BOOL)customViewShouldBeFunky:(MyCustomViewController*)customView;
@end
@interface MyCustomViewController : UIViewController {
NSObject<MyCustomViewDelegate> *delegate;
}
@property (readwrite, retain) IBOutlet NSObject<MyCustomViewDelegate> *delegate;
@end
Da es eine IBOutlet
ist, können Sie den Delegaten wie jeder andere Delegierte in Interface Builder verdrahten.
Dann rufen Sie [delegate customViewShouldBeFunky:self]
, wenn Sie bestimmen müssen, wie Ihre Ansicht sich verhalten sollte.
"User Defined Laufzeitattribute" im Identity Inspector ist wahrscheinlich, was Sie suchen. Dies ist seems to be new ab Xcode 4.2.
Leider gibt es auf der Apple Developer-Website keine Dokumentation zu dieser Funktion. Ich konnte es für eine einfache Eigenschaft verwenden.
Ab Xcode 6 gibt es einen neuen Weg dies zu tun. Sie können Ihren Ansichtseigenschaften jetzt das Attribut IBInspectable zuweisen und Sie können diese Eigenschaften dann in IB wie mit der Standardansicht bearbeiten.
So zum Beispiel:
@property (nonatomic, strong) IBInspectable BOOL
Weiteren Angaben (auch für das neue Attribut IBDesignable) in Apples Dokumentation: https://developer.apple.com/library/ios/recipes/xcode_help-IB_objects_media/chapters/CreatingaLiveViewofaCustomObject.html
Hier ist ein Beispiel von Eigenschaften überschreiben und sie in benutzerdefinierten Klassen einstellen, kann dies Hilfe. Der Eigenschaftscode funktioniert, bevor watchFromNib aufgerufen wird. So können Sie entscheiden, was Sie tun müssen, basierend auf der Entscheidung des Benutzers in watchFromNib.
Hallo Umair, deine letzten zwei Antworten deuten auf eine gelöschte Antwort hin, ich denke, dass du zu diesem Link tauschst? http://stackoverflow.com/a/31094561/1699210. Dennoch, wenn sie stehen, könnten sie als Link nur als Antwort entfernt werden, Sie sollten sie aushöhlen. Im Allgemeinen wäre dies vorzugsweise ein Kommentar (ich weiß, dass du nicht unter 50 Wiederholungen sein kannst) – bummi
- 1. Hintergrund von UITableview im Interface Builder festlegen?
- 2. Interface Builder für SpriteKit
- 3. Interface Builder (User Interface Designer) für Android
- 4. Interface Builder "Objekt" an Bildschirmkanten "sperrt"
- 5. Hervorgehobene Eigenschaft ist nur für die Anzeige in Interface Builder
- 6. Binding in Interface Builder
- 7. Ausnahme beim Festlegen des Feldes Nib Name im Interface Builder
- 8. Interface Builder für iPhone Tutorial
- 9. Globale Farbpalette für Interface Builder
- 10. Interface Builder: Autolayout für MapView
- 11. Festlegen der HasDropShadow-Eigenschaft für ein Popup
- 12. Festlegen der UIButton Layer-Rahmenbreite und -farbe im Interface Builder
- 13. Gewohnheit UIView mit Interface Builder gebaut zugänglich/positionierbar über Interface Builder
- 14. Stil für benutzerdefiniertes Steuerelement festlegen
- 15. Objekt und externes Objekt in XCode Interface Builder
- 16. Interface Builder Positionsposten sperren?
- 17. Verwendung von Interface Builder für UITableViews
- 18. Das Festlegen einer Eigenschaft für ein Steuerelement vor CreateChildControls heißt
- 19. Festlegen einer Eigenschaft für einen CCLayer in einer CCScene
- 20. Interface Builder "Simulate Interface" funktioniert nicht
- 21. Platzhalterobjekte in Interface Builder
- 22. Interface Builder UIDatePicker
- 23. Interface Builder Warnungen
- 24. UITextField ändert die Schriftgröße über den Interface Builder
- 25. Option "Builds für" in Interface Builder
- 26. Edit-Modus für UITableViewCell mit Interface Builder
- 27. IBDesignable - Subviews durch Interface Builder
- 28. Ändern von UIView-Attributen über den Interface Builder
- 29. TypeScript Interface-Signatur für Eigenschaft ohne Setter.
- 30. Ansichtselement in Interface Builder ersetzen
Warum können Sie es nicht im Code tun? Ich benutze nicht einmal IB für iphone, es gibt nicht viel Sinn für einfache UI's für iPhone Apps. – mk12