2009-08-18 11 views
3

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

+0

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

Antwort

0

Haben zwei Unterklassen ist wahrscheinlich einfacher, und wird einfacher zu dokumentieren.

2

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.

3

"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.

7

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

0

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.

https://stackoverflow.com/a/31094561/1699210

+0

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

Verwandte Themen