6

Tôi tự hỏi, làm thế nào để có được navController từ AppDelegate = [[UIApplication sharedApplication] delegate] trong lập trình iPhone. ví dụ: trong chế độ xem khác, nơi chúng tôi tham chiếu đến AppDelegate.Cách tải navController từ AppDelegate.

Trong applicationDelegate.h ta có:

UINavigationController *navController; 

Và sau trong applicationDelegate.m

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    [window addSubview: navController.view]; 
    [window makeKeyAndVisible]; 
} 

Có anyway để có được những navController từ MainWindow:

UIWindow *mainWindow = [appDelegate window]; 
+1

Tại sao bạn không đặt trình điều khiển điều hướng là thuộc tính của ứng dụng của bạn? –

+0

Tôi cần có thông tin về navController chỉ bởi mainWindow (UIWindow * mainWindow = [appDelegate window]), là không thể. – ramo

+0

Tôi cho là không. Nhưng tại sao bạn không thể sử dụng ứng dụng đại biểu, thực sự? –

Trả lời

17

Nếu UIViewController khác này được chứa trong các UINavigationController, bạn chỉ có thể gọi:

UINavigationController *navController = self.navigationController; 

từ UIViewController.

Nếu không, bạn có thể đặt UINavigationController làm thuộc tính trong AppDelegate.

// AppDelegate.h 
@property (nonatomic, strong) UINavigationController *navController; 

Sau đó truy cập appDelegate.navController.

Hoặc, bạn có thể thiết lập các UINavigationController như rootViewController cửa sổ của:

[window setRootViewController:navController]; 

Và gọi từ bất cứ nơi nào:

UINavigationController *navController = window.rootViewController; 
+0

Rất có tính hướng dẫn! Cảm ơn bạn! Một câu hỏi là: nếu bạn định truy cập navController thông qua 'window', bạn không cần phải truy cập thông qua UIApplication? Có lẽ có một cách ngắn hơn? – JohnK

+0

Bạn có thể truy cập cửa sổ từ bất kỳ UIView nào với thuộc tính 'window'. – Lucien

1

Bạn có thể đặt navController làm tài sản cho lớp đại biểu của mình. mẫu dưới đây:

Trong applicationDelegate.h

@property (retain, nonatomic) UINavigationController *navController; 

Trong applicationDelegate.m

@synthesize navController; 

sau đó bạn có thể sử dụng đoạn mã sau để có được những navController trong các lớp khác (Giả sử lớp đại biểu của bạn là MyApplicationDelegate):

appDelegate = (MyApplicationDelegate*)[[UIApplication sharedApplication] delegate]; 
UINavigationController *navController = appDeleagte.navController 
2

Bạn có thể đặt navCo ntroller một tài sản

@property (nonatomic,strong) UINavigationController *navController; 

Sau đó chỉ cần truy cập nó từ appdelegate bạn

appDelegate.Controller 
-1

Nếu bạn là beginer và người học, bộ điều khiển định vị được chia sẻ trong toàn bộ ứng dụng mà sẽ chỉ chuẩn bị "chồng" của ứng dụng của bạn viewcontrollers, vì vậy bạn có thể truy cập vào navigationcontroller trong bất kỳ viewcontroller nào (chỉ khi controller đó đã được đẩy) thông qua ứng dụng. Khi bạn đẩy bất kỳ bộ điều khiển nào nó sẽ được thêm vào "ngăn xếp" của bộ điều khiển điều hướng.

Bạn có thể truy cập bộ điều khiển điều hướng bằng chính đối tượng của chính chế độ xem đó.

[self.navigationController pushViewController:detail animated:YES]; 

Đi qua liên kết sẽ cung cấp kiến ​​thức hoàn chỉnh về giải phẫu điều hướng.

http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html

1

Không tính thêm cần thiết, sẵn gần như bất cứ nơi nào trong ứng dụng của bạn sử dụng định nghĩa macro này:

#define mainNavController (((AppDelegate*)[[UIApplication sharedApplication] delegate]).navController) 

Khi bạn đặt macro ở đầu bạn r nguồn hoặc trong một tập tin tiêu đề .h mà bạn nhập vào nguồn của bạn, sau đó bạn có thể bắt đầu sử dụng mainNavController như thể nó là một biến địa phương.

Ví dụ:

[mainNavController pushViewController:myViewController animated:YES]; 

Hoặc không có macro, trực tiếp trong mã:

AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 
appDelegate.navController; // do something with the navController 

Bạn có thể sử dụng mã này hầu như bất cứ nơi nào, đó là thuận tiện nếu bạn đang làm việc bên trong một lớp và bạn không thể truy cập trực tiếp vào ViewController.

Các vấn đề liên quan