【发布时间】:2011-08-10 16:21:54
【问题描述】:
为什么将以下代码从旧条目更改为新条目可以解决以下问题。
代码:
// OLD Entry - Did not work
//[self.window addSubview:navigationController.view];
// NEW Entry - Fixed it
self.window.rootViewController = self.navigationController;
我使用旧代码时遇到的问题:
我正在使用 UINavigationController 并有一个“mainView”UITableViewController,然后将一个 2 级视图推送到堆栈上,我们称之为“detailedView”UITableViewController。
从主要到细节正常来回导航工作正常
但是当启动时自动启动到第二个视图(当我保存状态)时,我可以进入第二个视图,但是在这种情况下,工具栏按钮不会出现在第二个视图的底部。当我回到主页时(通过 UINavigationController 标准安排),然后选择 UITableView 中的行,然后再次回到同一个视图,工具栏项看起来很好。
无法追踪此问题,但最终通过反复试验,我注意到 appDelegate(所有地方)中的代码更改(见上文)似乎解决了问题。
有什么想法吗?
编辑:为了完整起见,这里是完整的方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
RootViewController *rootViewController = (RootViewController *)[navigationController topViewController];
NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
abort(); // TODO: Do better job here than abort
}
rootViewController.managedObjectContext = context;
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
编辑 2:哦,我确实有一个 NIB 文件,并且在界面生成器中设置了根视图控制器/窗口 - 所以我想知道我是否在这里混合了一个 NIB 和编程方法,这可能会导致问题吗?
编辑 3:还注意到,当我添加“self.window.rootViewController = self.navigationController”行时,以下 didFinishLaunchingWithOptions 代码有效。那就是没有这条线(这是 coredatabooks 示例所做的)我得到了问题。
RootViewController *rootViewController = (RootViewController *)[navigationController topViewController];
rootViewController.managedObjectContext = self.managedObjectContext;
self.window.rootViewController = self.navigationController; // WORKS WHEN I ADD THIS LINE IN FOR SOME REASON???
// Configure and show the window
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
return YES;
【问题讨论】:
-
重新启动时如何导航到第二个视图控制器?
标签: iphone ios uinavigationcontroller uitableview