在开发中,碰到一个场景,具体是这样的:View-1 prsent 到 VC1,VC1 push 到 VC2,结果 push 没有反应?
具体原因如下:
如果 ViewController
无法执行 push 操作,这可能是因为它没有被嵌入在一个 UINavigationController
中。当你使用 presentViewController:animated:completion:
方法展示 ReleaseViewController
时,它本身并不会被放入导航控制器堆栈中,除非它已经是一个 UINavigationController
的子类或者已经被嵌入到一个 UINavigationController
里。
解决方法:
为了能够在 ViewController
中执行 push 操作,你需要首先确保它是作为 UINavigationController
的一部分被展示的。这里是一个正确的方法,将 ReleaseViewController
嵌入到一个新的 UINavigationController
中,然后展示这个导航控制器:
ReleaseViewController *vc = [ReleaseViewController new];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:vc];
UINavigationController *rootNavController = (UINavigationController *)[UIApplication sharedApplication].delegate.window.rootViewController;
[rootNavController presentViewController:navController animated:YES completion:nil];
在这个修正后的代码中,ReleaseViewController
被初始化为 navController
的根视图控制器,然后这个 navController
被模态呈现。这样,ReleaseViewController
内部的 push 操作就会有一个导航堆栈可供使用。
一旦 ReleaseViewController
被嵌入到 UINavigationController
中,它就可以使用 self.navigationController
来执行 push 操作:
SomeOtherViewController *otherVC = [SomeOtherViewController new];
[self.navigationController pushViewController:otherVC animated:YES];
这里的 self.navigationController
将不再是 nil
,因为 ReleaseViewController
现在是一个导航控制器的一部分。
零散知识点,仅做记录!
标签:控制器,嵌入,navController,ios,ReleaseViewController,响应,UINavigationController,push From: https://blog.51cto.com/u_13188203/9368863