我的应用程序有一个根的ViewController,其在该应用显示模态的ViewController UI不响应presentViewController后:动画:完成:
- 登录的viewController视图的开始,如果用户没有在 登录
- 主要的viewController视图如果用户在
的AppDelegate代码记录:
- (BOOL) application: (UIApplication*) application
didFinishLaunchingWithOptions: (NSDictionary*) launchOptions
{
self.window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];
self.window.rootViewController = [[RootViewController alloc] init];
[self.window makeKeyAndVisible];
return YES;
}
下面是RootViewController的使用的代码:
@implementation RootViewController
- (void) loadView
{
[super loadView];
// here mainViewController and loginNavigationController are initialized
}
...
- (UIView*) view
{
[super view]; // this invokes loadView
return self.isLoggedIn ? self.mainViewController.view :
self.loginNavigationController.view;
}
....
- (void) userDidLogin
{
[self.loginNavigationController presentViewController: self.mainViewController
animated: YES
completion: nil];
}
@end
如果用户没有登录并按下登录按钮主要的viewController呈现。
问题是,在呈现主视图控制器后,我无法与任何UI元素进行交互。例如,我有一个的tableView作为主要的viewController的子视图,当我试图把它的滚动,我得到在调试面板以下警告:
<UITableView: 0x202a4000; frame = (0 0; 310 548); clipsToBounds = YES;
gestureRecognizers = <NSArray: 0x1fd9f570>; layer = <CALayer: 0x1fdccff0>;
contentOffset: {0, 0}>'s window
is not equal to <RootViewController: 0x1fd9f7d0>'s view's window!
您所覆盖的视图方法位于何处?在应用程序委托?我觉得像那样动态返回视图不是正确的方法。 你应该总是推送或呈现你的下一个视图控制器,框架应该自动显示给你,你不应该告诉它哪个视图呈现。 – feliun
@feliun,请查看我更新的答案。我没有提到过我已经在几个应用程序中使用过这种方法,并且它的工作完美无瑕。这是我第一次得到这个错误。 – NikGreen