从消失中停止视图
我从其他视图控制器通过推送其表格视图单元格启动viewController。现在在第二个视图控制器上,我有一大堆控件,主要是测试字段。我想通过使用第二个视图控制器中提供的默认后退按钮,因此它将成为第一个视图控制器的标题,并且像我说的默认值一样记住,所以我不想为后面创建自己的按钮在第二个视图控制器上。所以想要检测第二个视图控制器是否正在退出或消失或将消失,并基于某些条件阻止它回到原来的调用者视图控制器。我原本以为可以在这里完成:从消失中停止视图
-(void) viewWillDisappear:(BOOL)animated {
if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound)
{
// So back button was pressed on the second view controller, so how do I stop it
// here from going back to the original view controller.
}
}
或者我该怎么做?我似乎无法找到一个视图控制器返回类型BOOL方法来调用并停止它。
谢谢。
请注意,该方法被称为viewWillDisappear,而不是viewShouldDisappear,所以苹果不会让你停止视图消失在这一点。而从用户的角度来看,按下后退按钮的确应该把它们带回来。相反,您可能会考虑在不允许的情况下隐藏后退按钮。
我想禁用并启用后退按钮,但是基于第二个视图控制器上编辑的内容,我真的想先显示一些描述性警报。这就是为什么我想要一些如何取消回来。而不是用户不知道什么是错的,为什么后退按钮被启用,或者我将警报与我的文本字段的事件绑定。 – 2012-08-10 05:37:30
好吧,我认为你唯一的选择就是制作你自己的后退按钮(setLeftBarItem),并将它指向你自己的例程。您仍然可以从导航堆栈中的父视图控制器中取得其名称,以使其名称与以前相同。 – mackworth 2012-08-10 05:48:26
感谢@macworth显然你可以告诉我这是新的,真的希望会有一种卸载类型的视图事件,我可以像其他类型的事件一样取消,因为我发现返回类型是BOOL,所以可以有很容易通过返回NO。 – 2012-08-10 06:00:47
对不起,我不擅长英语,所以阅读这么长的文字对我来说有点困难。我只能得到你想要没有按钮就回去。我知道navigationController有一个方法返回到前一个视图。
没有不正确的@Lin,我想停止默认的后退按钮,如果我想不创建我自己的后退按钮。 – 2012-08-10 05:39:23
你想改变默认后退按钮的行为?我有一个方法:设置一个按钮不能在默认按钮上看到,它做你想做的,然后启用它,如果你不想使用默认按钮,禁用它,如果你不想回去作为默认值。 – 2012-08-10 05:53:35
林,根据@ mackworth的评论,我不认为我想要做什么是可能的,所以我会使用自定义按钮。 – 2012-08-10 05:59:02
制作自定义后退按钮并使用self.navigationItem.hidesBackButton=YES
将目标添加到自定义后退按钮并随意使用。当你想移动视图时,你可以使用[self.navigationController popViewcontroller]
。
您不能阻止视图控制器关闭,但您可以模拟它。
这条线将替换按钮关闭按钮将调用一个自制的功能
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(closeBtn)];
所以,你将能够关闭视图,如果你想:
- (void) closeBtn
{
bool shouldClose=true;
// Your conditions here
if (shouldClose) [self dismissViewControllerAnimated:YES completion:nil];
}
所以你要启用/禁用后退按钮? – 2012-08-10 05:47:47
不,我希望自从新的objective-c以来,当视图正在消失,然后取消它从消失,所以它保持在同一视图,而不创建我自己的自定义后退按钮,并不得不通过控制器。 – 2012-08-10 06:09:49
显然基于下面的答案,它看起来像没有其他方式,但创建一个自定义按钮。 – 2012-08-10 06:51:19