verwirrt über initWithCoder und benutzerdefinierte UIViews
Ich versuche, erstellen Sie eine benutzerdefinierte UIView
bringt in seiner Ansicht aus einer nib-Datei.
In meinem controller habe ich so etwas wie:
self.arcView=[[JtView alloc] initWithCoder:self];
self.arcView.backgroundColor=[UIColor redColor];
self.arcView.frame=CGRectMake(30.0f,200.0f, 100.0f, 100.0f);
[self.view addSubview:self.arcView];
Meine erste Frage ist, was sollte in die Argumentation für initWithCoder (NSCoder *)
? Ich habe versucht selbst, bekam aber eine inkompatible Zeiger-Typ, aber diese schien zu funktionieren. Aber auf Frage #2:
Zweite, das argument ist, dass Sie initWithCoder
mit nibs
und initWithFrame
wenn Sie Ihre benutzerdefinierte Ansicht in einem Rahmen. Nun gut, ich will laden ein nib
in meiner benutzerdefinierten Ansicht und dann legen Sie Sie in einen frame. Ich kann nur hinzufügen, ein frame oben und es ist ok (es sieht aus wie es funktioniert)?
- Schauen Sie bitte hier und finden Sie im Codebeispiel stackoverflow.com/a/17798646/381807 – nesimtunc
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du machst es anders herum: es ist nicht Sie, wer sollte rufen
initWithCoder:
, es ist die Umsetzung derloadNibNamed:owner:
Methode, die es tut.Was Sie tun müssen, um in Ihrem code aufrufen
Dies würde Entbündeln der Feder, und rufen Sie Ihren
initWithCoder:
Initialisierer, und geben Sie wieder einen Blick mit allen Steckdosen verbunden.NSArray
alle top-level-Objekte in der Feder? Was ist, wenn dieUIView
ist nicht die erste?initWithCoder
heißt viel vorinit
undviewDidLoad
Methoden. Und Sie nie nennen. Es wird als so laden Sie eine nib-Datei von IhremmainBundle
.Jedoch, Es erhält
NSCoder
als argument. Prüfen Sie, wie es heißt, in einer Klasse:Dass es funktionieren wird und nicht anrufen
initWithCoder:
.Nie rufen initWithCoder ausdrücklich, es bekommt Aufruf implizit beim unarchiving archivierte Objekt und initialisieren Objekt ivars und Eigenschaften - Archiv-Objekt können Sie Ihr eigenes Modell-Klasse gespeichert in Persistenz-Speicher oder eine benutzerdefinierte Ansicht aus geladen xib-Datei.
In Ihrer Klasse schauen, wie Sie versuchen, eine benutzerdefinierte Ansicht erstellen, so laden Sie es aus der xib-Datei, Referenz @dasblinkenlight-code ist die perfekte Lösung.