Nir*_*att 9 uinavigationcontroller popviewcontroller pushviewcontroller ios
我的设置很简单,我的问题不是来自非常不同的这一个.但是为了更好地解释它我在这里发布:
NavController -> VC1 -> VC2
Run Code Online (Sandbox Code Playgroud)
VC1是NavController的根视图控制器.VC2可通过VC1的Push segue访问.
我想在VC1中检测是否:
它直接作为根视图控制器出现(通过Push)它是由于VC2被弹出而出现的
我阅读的文档说下面应该告诉我以后是否属实.
isMovingToParentViewController == NO
Run Code Online (Sandbox Code Playgroud)
然而事实并非如此,并且上述情况总是证明是正确的.这意味着,(self.isMovingToParentViewController == NO)总是在发生.
这是我的代码:
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.navigationController.navigationBarHidden = YES;
//pushed to stack
if (self.isMovingToParentViewController == YES)
{
//First time
}
else
//popped off
{
//via Pop from VC2
}
}
Run Code Online (Sandbox Code Playgroud)
viewDidAppear的情况也是如此.
事实上检查,我在开始时放置断点,并在两种情况下检查以下所有都是FALSE:
([self isMovingFromParentViewController])
([self isMovingToParentViewController])
([self isBeingPresented])
([self isBeingDismissed])
Run Code Online (Sandbox Code Playgroud)
怎么了?我的故事板里有什么东西可以搞定吗?请帮忙...
rde*_*mar 14
不幸的是,isMovingToParentViewController不适用于根视图控制器,所以我通常用BOOL处理这种情况,
@implementation ViewController {
BOOL isFirstAppearance;
}
- (void)viewDidLoad
{
[super viewDidLoad];
isFirstAppearance = YES;
}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (isFirstAppearance) {
NSLog(@"root view controller is moving to parent");
isFirstAppearance = NO;
}else{
NSLog(@"root view controller, not moving to parent");
}
}
Run Code Online (Sandbox Code Playgroud)
一个简单的解决方案是添加一个标志,viewWillDisappear如果 VC1 已消失,则将其设置为 YES。否则视图从未消失,所以它是第一次推送(RootViewControllerof Navigation Controller)。
示例代码
BOOL hasDisappeared;
-(void)viewWillAppear:(BOOL)animated
{
if (hasDisappeared==YES) {
//VC2 has been popped
}
else
{
//VC1 is the rootViewController
}
}
-(void)viewWillDisappear:(BOOL)animated
{
//Pushing to VC2
hasDisappeared=YES;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5999 次 |
| 最近记录: |