2012-03-29 16 views
5
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    HeadViewController *headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];  
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 120)]; 
    [view addSubview:headViewController.vew]; 
    [self.view addSubview:view]; 
} 

HeadViewController.h angezeigt:UIView addSubview und die Subview nicht

@interface HeadViewController : UIViewController 
{ 
    IBOutlet UIView *view; 
} 
@property (nonatomic, retain)IBOutlet UIView *view; 
@end 

und verbinde ich den Blick auf den Besitzer der Datei.

Und ich kann die headViewController.view nicht sehen.

Antwort

15

Zuerst müssen Sie die view Steckdose in der HeadViewController Klasse nicht definieren. Es wird automatisch von der Superklasse UIViewController übernommen.

Dann empfehle ich Ihnen, die Ansicht von HeadViewController direkt zu Ihrer aktuellen Ansicht hinzuzufügen. Z.B.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    HeadViewController *headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];  
    headViewController.view.frame = CGRectMake(0, 0, 320, 120); 
    [self.view addSubview:headViewController.view]; 
} 

Aber, wenn Sie ARC verwenden (Automatic Reference Counting), die headViewController Instanz wird wahrscheinlich nach dem Ende des viewDidLoad Verfahren werden ausgeplant. Es ist praktisch (und ich würde sagen, es ist obligatorisch), diese Instanz einer lokalen Variablen in dem Controller zuzuweisen, den Sie gerade anzeigen. Auf diese Weise können Sie später bei Bedarf die Komponenten der Ansicht bearbeiten, die Instanz bleibt erhalten und alles andere funktioniert einwandfrei. Sie sollten so etwas wie haben:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    self.headViewController = [[HeadViewController alloc] initWithNibName:@"HeadViewController" bundle:nil];  
    headViewController.view.frame = CGRectMake(0, 0, 320, 120); 
    [self.view addSubview:headViewController.view]; 
} 

und

@interface MyController() 
    @property (nonatomic, strong) HeadViewController *headViewController; 
@end 

in der verdeckten Schnittstellendefinition zu Beginn der .m Klasse Implementierungsdatei.

+0

Ich korrigieren Sie: headViewController.view ist Null, wenn es nicht als Unteransicht hinzugefügt. müssen addsubview austauschen und den Rahmen setzen – NeverBe

+0

Überprüfen Sie mein Update über ARC. Wenn 'headViewController.view'' nil' ist, überprüfen Sie die Verbindung der Ansicht mit dem Controller in der NIB-Datei. Ist es "nil" nur innerhalb dieser Methode (Outlet-Problem) oder nachdem es beendet ist (ARC-Problem)? – marzapower

+0

Ich habe den Code geändert, genau wie du es mir gesagt hast, und ich definiere eine Ansicht, weil ich die Standardansicht lösche. Und es gibt noch keine headViewController.view ... ich bin verwirrt. – jxdwinter

0

Es ist wie ein Tippfehler sieht - vergessen, die ich in .view

[Ansicht addSubview: headViewController.vew];

+1

Das könnte richtig sein, aber es sieht aus wie die op hat dieses Problem schon lange gelöst ... – greedybuddha

0

i wird in der Syntax fehlt

[Ansicht addSubview: headViewController.view];

+0

Die Antwort wurde 2 Jahre zurück gegeben. Was ist jetzt der Zweck? – YoungHobbit

+0

Ich habe gerade dieses gesehen – Bharath

Verwandte Themen