Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 模态viewcontroller UI在呈现后没有响应viewcontroller:已设置动画:完成:_Ios_User Interface_Modalviewcontroller_Presentmodalviewcontroller - Fatal编程技术网

Ios 模态viewcontroller UI在呈现后没有响应viewcontroller:已设置动画:完成:

Ios 模态viewcontroller UI在呈现后没有响应viewcontroller:已设置动画:完成:,ios,user-interface,modalviewcontroller,presentmodalviewcontroller,Ios,User Interface,Modalviewcontroller,Presentmodalviewcontroller,我的应用程序有一个根viewcontroller,它在应用程序开始时显示 登录视图控制器视图(如果用户未登录) 主视图控制器视图(如果用户已登录) AppDelegate代码: - (BOOL) application: (UIApplication*) application didFinishLaunchingWithOptions: (NSDictionary*) launchOptions { self.window = [[UIWindow

我的应用程序有一个根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

问题是,在显示主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!
的窗口
不等于的视图的窗口!

好的,在查看更新后的代码后,我发现您有一个rootViewController,并且动态地给出了您认为应该显示的视图。问题是,rootViewController负责根视图,而其他两个视图控制器管理它们自己的视图。您不应该传递其他视图控制器的视图

因此,最终看起来您希望有条件地设置rootviewcontroller。让我们看看应用程序代理。我认为你应该让你的应用程序代理做这样的事情。让它在运行时确定要显示哪个viewcontroller。然后将其设置为应用程序的rootviewcontroller

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UIViewController * resolvedRootViewController = [self someMethodThatCorrectlyGivesRootViewController];

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = resolvedRootViewController;
    [self.window makeKeyAndVisible];

    return YES;
}

好的,在看了更新的代码之后,我看到您有一个rootViewController,并且动态地给出了您认为应该显示的视图。问题是,rootViewController负责根视图,而其他两个视图控制器管理它们自己的视图。您不应该传递其他视图控制器的视图

因此,最终看起来您希望有条件地设置rootviewcontroller。让我们看看应用程序代理。我认为你应该让你的应用程序代理做这样的事情。让它在运行时确定要显示哪个viewcontroller。然后将其设置为应用程序的rootviewcontroller

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UIViewController * resolvedRootViewController = [self someMethodThatCorrectlyGivesRootViewController];

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = resolvedRootViewController;
    [self.window makeKeyAndVisible];

    return YES;
}

您覆盖的视图方法位于何处?在应用程序代理中?我觉得这样动态地返回视图不是正确的方法。您应该始终推送或显示框架应自动为您显示的下一个视图控制器,您不必告诉它要显示哪个视图。@feliun,请查看我的更新答案。我没有提到我以前在几个应用程序中使用过这种方法,而且它工作得非常完美。这是我第一次遇到这个错误。您覆盖的视图方法在哪里?在应用程序代理中?我觉得这样动态地返回视图不是正确的方法。您应该始终推送或显示框架应自动为您显示的下一个视图控制器,您不必告诉它要显示哪个视图。@feliun,请查看我的更新答案。我没有提到我以前在几个应用程序中使用过这种方法,而且它工作得非常完美。这是我第一次遇到这个错误。几小时后,我发现问题是由一个有缺陷的活动指示器引起的。我会接受你的回答,但我仍然认为我的方法也是可行的。谢谢你的时间,@feliun!öκ,几个小时后,我发现问题是由一个小车活动指示器引起的。我会接受你的回答,但我仍然认为我的方法也是可行的。谢谢你的时间,@feliun!