Normalerweise erstellen ich meine benutzerdefinierten Ansichten programmatisch und lassen sie auch mit benutzerdefinierten Init-Methoden (z. B. initWithFrame: SomeParam: OtherParam) programmgesteuert initialisiert werden. Ist es möglich, solche benutzerdefinierten Ansichten in Kombination mit einer XIB-Datei zu verwenden? Das heißt, eine übergeordnete xib-Datei zu haben, die verschiedene dieser benutzerdefinierten Ansichten als Teilansichten hat, in denen diese Teilansichten möglicherweise eine andere init-Methode verwenden müssen?Benutzerdefinierte iOS-Ansichten in xib-Dateien
Antwort
entfernen möchten Wenn Sie benutzerdefinierte Ansichten in eine xib Datei hinzufügen, können Sie keine benutzerdefinierte initializer verwenden. Sie werden alle mit initialisiert.
In der Regel werden Sie in einer allgemeinen Methode eingerichtet, die von dort oder in awakeFromNib
aufgerufen wird.
Wenn Sie benutzerdefinierte Eigenschaften für Ihre Ansicht festlegen müssen, die von außerhalb stammen, tun Sie dies in viewDidLoad
Ihres View-Controllers.
natürlich ist es möglich. Ziehen Sie eine uiview in die Xib, nicht in die Standardansicht. dann machen Sie eine IBOutlet UIView *myCustomView;
und verbinden Sie es dann mit der anderen Ansicht. wenn u diese Ansicht anzeigen möchten fügen Sie diese als [self.view addSubview:myCustomView];
wenn es
[myCustomView removeFromSuperView];
Also ... wie wäre es mit InitWithSomeValue: Wert Funktion? – Carina
Dies funktioniert nicht, wenn Sie eine benutzerdefinierte Header-Ansicht über mehrere XIB-Dateien teilen möchten ... Sie müssten es genau in jedem XIB neu definieren – LightningStryk
Holen Sie die Xib der Ansicht initialisiert den normalen Weg und mit der Referenz tun die benutzerdefinierten Einstellungen. Dieser Teil kann in der init-Methode wie this-
-(void)initfunction{
UIView *containerView = [[[NSBundle mainBundle] loadNibNamed:@"myView" owner:self options:nil] lastObject];
containerView.property1 = xyz;//Customization
containerView.property2= abc;//Customization
containerView.frame = CGRectMake(x,y,z,p);//Customization
[rootView addSubview:containerView];
}
gesetzt wird der Punkt ist, wenn wir eine xib verwenden wir initialisieren nicht explizit, die xib
Utility-Funktionen ein initialisierten Objekt zurück (von UIView
), nachdem man das bekommt UIView
Objekt kann er/sie das initialisierte Objekt als nur ein reguläres Objekt verwenden, um weitere benutzerdefinierte Änderungen vorzunehmen.
Die Klassen UINib (iOS) und NSNib (OS X) bieten eine bessere Leistung in Situationen, in denen Sie mehrere Kopien des Inhalts einer NIB-Datei erstellen möchten. Der normale Nib-Ladevorgang beinhaltet das Lesen der NIB-Datei von der Platte und das anschließende Instanziieren der darin enthaltenen Objekte. Mit den Klassen UINib und NSNib wird die NIB-Datei jedoch einmal von der Festplatte gelesen und der Inhalt wird im Speicher gespeichert. Da sie sich im Speicher befinden, dauert das Erstellen aufeinanderfolgender Objektgruppen weniger Zeit, da kein Zugriff auf die Festplatte erforderlich ist.
- Erstellen einer Sicht xib Datei: Rechtsklick auf das Projekt -> Neue Datei -> Benutzeroberfläche -> Ansicht (zB werden Sie „MyView.xib“ haben)
- Füllen Sie die Ansicht mit Interface Builder
next-Methode Sie übergeordnete Komponente
static UINib *nib = nil; - (UIView*)createNewViewFromNib: (NSString *)nibFileName { if(nib == nil) { nib = [UINib nibWithNibName:nibFileName bundle:nil ]; } // Unarchiving objects from the nib. You can do it multiple times to create a number of objects from same nib. NSArray* topLevelObjs = [nib instantiateWithOwner:self options:nil]; if (topLevelObjs == nil) { NSLog(@"Warning! Could not load nib file.\n"); return nil; } // We have only one view in the nib. return [topLevelObjs objectAtIndex:0]; }
Verwendung von Code nächste Zeile, die Sie mit wieder verwendbaren nib Objekt ansehen zu instanziiert:
UIView *item = [self createNewViewFromNib:@"MyView"]; // [self.view addSubview:item];
- 1. Benutzerdefinierte Daten für benutzerdefinierte Ereignisse in HockeyApp
- 2. Benutzerdefinierte Stile für benutzerdefinierte Widgets in Qt
- 3. Benutzerdefinierte benutzerdefinierte Leerfeld-Fehlermeldung
- 4. Benutzerdefinierte Steuerung Benutzerdefinierte Methoden?
- 5. Benutzerdefinierte Attribute in Android
- 6. Benutzerdefinierte Konvertierungsspezifikatoren in Java
- 7. benutzerdefinierte Sortiermethode in Ruby
- 8. Benutzerdefinierte Fortschrittsbalken in Android?
- 9. Benutzerdefinierte Abfragemethoden in NSManagedObejct
- 10. benutzerdefinierte Kategoriebaum in Wordpress
- 11. Benutzerdefinierte Leichtigkeit in animateWithDuration?
- 12. Benutzerdefinierte Dendrogramm in D3
- 13. Benutzerdefinierte Messwerte in Azure
- 14. Benutzerdefinierte Administrator in Alfresco
- 15. Benutzerdefinierte Tooltip in AngularJS
- 16. Benutzerdefinierte Funktionen in MATLAB
- 17. Benutzerdefinierte Variable in Modul
- 18. Benutzerdefinierte Konfiguration in. NET
- 19. Benutzerdefinierte Fehlermeldung in message.properties
- 20. Benutzerdefinierte Schleife in Python
- 21. Benutzerdefinierte Attributbindung in Silverlight
- 22. Benutzerdefinierte Datenstrukturen in Python
- 23. Benutzerdefinierte Segue in Swift
- 24. Benutzerdefinierte Ereignisse in C++?
- 25. benutzerdefinierte profil in iphone
- 26. Benutzerdefinierte Bestellung in Django
- 27. Benutzerdefinierte Zeichencodierung in C
- 28. Benutzerdefinierte AST in JavaCC?
- 29. Benutzerdefinierte Formatnummern in Excel
- 30. Benutzerdefinierte FileDialog in QML
Wenn ich tun müssen, bevor ViewDidLoad meines View-Controllers, wie zu tun es? So Beispiel ... Meine Ansicht wird verwendet, um eine Seite eines Buches anzuzeigen.Ohne benutzerdefinierte Init-Methode wie initWithPage: page verwende ich gleichzeitig auch das Storyboard. – Carina
Vor viewDidLoad ist Ihre Ansicht nicht vorhanden. Verschieben Sie einfach das Setup, das Sie in initWith ... ausführen, in eine andere Methode und nehmen Sie die gewünschten Änderungen vor, nachdem Sie die Eigenschaft festgelegt haben. – jrturton