2010-06-19 40 views
5

Tôi đang cố gắng làm ví dụ rất đơn giản về UINavigationController. Đây là mã của tôi:UINavigationController: Ví dụ đơn giản nhất

- (void)viewDidLoad { 
    [super viewDidLoad]; 

Dòng tiếp theo này hoạt động hoặc ít nhất không phát nổ.

navController = [[UINavigationController alloc] initWithRootViewController:self]; 
    self.title = @"blah"; 

    PageOneController *one = [[[PageOneController alloc]init] autorelease]; 

Ví dụ 1. dòng này NOTHING

[navController pushViewController:one animated:NO]; 

Ví dụ 2. Dòng này TRÌNH (nhưng không có điều khiển nav, tất nhiên)

[self.view addSubview:one.view]; 
} 

Tại sao tôi không thể đẩy Trường hợp ViewController vào navController và thấy thay đổi màn hình?

Lưu ý: Tôi nhận ra rằng tôi có thể có khái niệm của tôi về phía sau và tôi không cần phải có quan điểm của tôi tham khảo một UINavigationController ... hoặc một cái gì đó.

Trả lời

11
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    PageOneController *one = [[[PageOneController alloc]init] autorelease]; 
    one.title = @"blah"; 
    navController = [[UINavigationController alloc] initWithRootViewController:one]; 
    [self.view addSubview:navController.view]; 
} 

Ý tưởng cơ bản đằng sau bộ điều khiển gốc của trình điều khiển điều hướng là bộ điều khiển chế độ xem sẽ được hiển thị đầu tiên trong phân cấp bộ điều khiển điều hướng. Bộ điều khiển gốc không phải là bộ điều khiển xem mà bạn cắm bộ điều khiển điều hướng vào. Hi vọng điêu nay co ich.

+0

Câu trả lời hoàn hảo. Cảm ơn và chúc bạn may mắn trên SO. –

4

Tôi chỉ đang nghỉ ngơi câu trả lời @ E-ploko, chính xác 100% (đó là lý do tại sao tôi đánh dấu câu trả lời hay nhất).

Bạn cần nhiều chế độ xem hơn (và xem bộ điều khiển) để sử dụng UINavigationController. Một trong số đó là nhà ởUINavigationControllerrootViewController là trang đầu tiên của bộ truyện (trang không có "quay lại").

Tôi đã loại bỏ các phụ thuộc bên ngoài cho mẫu mã: rõ ràng đây là mã mẫu nguyên khối, không phải là mã thực nguyên khối.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIViewController *one = [[UIViewController alloc] init]; 

    [one.view setBackgroundColor:[UIColor yellowColor]]; 
    [one setTitle:@"One"]; 

    navController = [[UINavigationController alloc] initWithRootViewController:one]; 
    // here 's the key to the whole thing: we're adding the navController's view to the 
    // self.view, NOT the one.view! So one would be the home page of the app (or something) 
    [self.view addSubview:navController.view]; 

    // one gets reassigned. Not my clearest example ;) 
    one = [[UIViewController alloc] init]; 

    [one.view setBackgroundColor:[UIColor blueColor]]; 
    [one setTitle:@"Two"]; 

    // subsequent views get pushed, pulled, prodded, etc. 
    [navController pushViewController:one animated:YES]; 
} 
Các vấn đề liên quan