2009-06-22 19 views
6

Chciałbym uruchomić modalne widoku kontrolera sposób jeden robi z „ABPeoplePickerNavigationController” i to bez konieczności tworzenia kontroler nawigacyjny zawierający kontroler widoku.Uruchomienie modalne UINavigationController

Wykonanie czegoś podobnego daje pusty ekran bez tytułu paska nawigacji i nie ma skojarzonego pliku nib załadowanego do widoku, mimo że wywołuję initWithNibName po wywołaniu 'init'.

Mój kontroler wygląda następująco:

@interface MyViewController : UINavigationController 

@implementation MyViewController 
- (id)init { 
    NSLog(@"MyViewController init invoked"); 
    if (self = [super initWithNibName:@"DetailView" bundle:nil]) { 
     self.title = @"All Things"; 
    } 
    return self; 
} 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.title = @"All Things - 2"; 
} 

@end 

Przy użyciu kontrolera AB, wszystko co musisz zrobić to:

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; 
picker.peoplePickerDelegate = self; 

[self presentModalViewController:picker animated:YES]; 
[picker release]; 

ABPeoplePickerNavigationController jest zadeklarowana jako:

@interface ABPeoplePickerNavigationController : UINavigationController 

Innym sposobem utwórz widok modalny zgodnie z sugestią Apple 'View Controller Programming Guide for iPhone OS ':

// Create a regular view controller. 
MyViewController *modalViewController = [[[MyViewController alloc] initWithNibName:nil bundle:nil] autorelease]; 

// Create a navigation controller containing the view controller. 
UINavigationController *secondNavigationController = [[UINavigationController alloc] initWithRootViewController:modalViewController]; 

// Present the navigation controller as a modal view controller on top of an existing navigation controller 
[self presentModalViewController:secondNavigationController animated:YES]; 

mogę tworzyć to w ten sposób karę (tak długo, jak mogę zmienić MyViewController dziedziczyć z UIViewController zamiast UINavigationController). Co jeszcze powinienem zrobić, aby MyViewController uruchamiał się w taki sam sposób, jak ABPeoplePickerNavigationController?

Odpowiedz

4

Chciałbym uruchomić modalne widoku kontrolera sposób jeden robi z „ABPeoplePickerNavigationController” i to bez konieczności tworzenia kontroler nawigacyjny zawierający kontroler widoku

Ale to jest dokładnie to, co ABPeoplePickerNavigationController to robi. To nie jest magia, jest to UINavigationController, który wewnętrznie tworzy instancję UIViewController (UITableView, który jest wypełniony twoimi kontaktami książki adresowej) i ustawia UIViewController jako widok główny.

rzeczywiście można stworzyć swój własny podobny podklasę UINavigationcontroller. Jednak w jego inicjator, musisz utworzyć kontroler widoku, aby załadować jako jego główny widok, tak jak robi to ABPeoplePickerNavigationController.

Następnie można robić, co chce tak:

[self presentModalViewController:myCutsomNavigationController animated:YES]; 

W kodzie Wysłany:

@interface MyViewController : UINavigationController 

@implementation MyViewController 
- (id)init { 
    NSLog(@"MyViewController init invoked"); 
    if (self = [super initWithNibName:@"DetailView" bundle:nil]) { 
     self.title = @"All Things"; 
    } 
    return self; 
} 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.title = @"All Things - 2"; 
} 

@end 

Podejrzewam masz problemy stalówka. nie ma gniazda "rootViewController" do połączenia. To dlatego masz pusty ekran.

initalizer należy używać wewnętrznie jest taka:

self = [super initWithRootViewController:myCustomRootViewController]; 
Powiązane problemy