Ios 弹出视图控制器
我不熟悉objective-C编码,正在尝试使用pop来Ios 弹出视图控制器,ios,objective-c,uinavigationcontroller,pushviewcontroller,poptoviewcontroller,Ios,Objective C,Uinavigationcontroller,Pushviewcontroller,Poptoviewcontroller,我不熟悉objective-C编码,正在尝试使用pop来viewController。要在点击按钮时执行此操作,我使用 [self.navigationController popToViewController:(what goes here) animated:YES]; 我知道它是一个UIViewController*,但是我想知道我在哪里声明它,以及我将使用什么代码来声明它 我的基本故事板是我有4个视图控制器A,B,C,D,A是根,它推到B,它推到C,它推到D,我的按钮在D上,我试图弹
viewController
。要在点击按钮时执行此操作,我使用
[self.navigationController popToViewController:(what goes here) animated:YES];
我知道它是一个UIViewController*
,但是我想知道我在哪里声明它,以及我将使用什么代码来声明它
我的基本故事板是我有4个视图控制器A,B,C,D,A是根,它推到B,它推到C,它推到D,我的按钮在D上,我试图弹回到B。索引方法的对象不工作,因为它不总是去A->B->C->D
有时它去A->C->B->D
所以
[self.navigationController popToViewController: [self.navigationController.viewControllers objectAtIndex:2] animated:YES];
所以这不起作用
提前谢谢你的帮助。如果这个问题太基本,很抱歉。您需要一种方法来找到要弹出到的视图控制器
-(IBAction)popToDesiredViewController:(id)sender
{
UIViewController *desiredVC = nil;
// LOOK AT ALL VIEW CONTROLLERS IN NAVIGATION CONTROLLER
for (UIViewController *oneVC in self.navigationController.viewControllers) {
// CHECK IF THIS IS THE VIEW CONTROLLER YOU WANT
// change this to your logic
BOOL foundDesiredVC = [oneVC isKindOfClass: [SignInVC class]];
if (foundDesiredVC) {
desiredVC = oneVC;
break;
}
}
[self.navigationController popToViewController:desiredVC animated:YES];
}
就我个人而言,我并不认为这是一个基本问题,即使在这种情况下我也会被打动。但我通过使用“Mediator设计模式”找到了一个很好的解决方案,并结合以下方法开发了我的自定义UINavigationController作为协调器:
- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated
以及维护我自己的导航堆栈
如果您的导航方式不可预测,协调器(您的自定义UINavigationController)必须控制您的导航 您的问题是关于推、弹出或如何制作视图控制器?如果视图控制器B位于导航堆栈中,则popToViewController是正确的方法。您需要保留对视图控制器B的引用,例如作为应用程序委托的属性,或者您可以使用RestorationIdentifier数组遍历导航控制器viewcontrollerwithrestorationidentifier来标识所需的引用-如果您有情节提要,可以使用isMemberOf类方法,您根本不应该调用
pushViewController
。您应该使用推送序列。@MJN这是关于弹出对不起,关于这个输入错误,我该如何将它作为属性保存在应用程序委托中?如何保存它的引用?谢谢如果您输入了一个错误,请更新您的问题。嘿,当我在按下按钮的方法中使用这个错误时,我得到了这个错误“由于未捕获的异常而终止应用程序'nsinternalinconsistenceexception',原因:'试图弹出到一个不存在的视图控制器。'”并且,对于输入错误,很抱歉每次发生这种情况时所需的VC为零吗?如果是这样,您将希望将pop方法包装在一个If语句中,该语句仅在desiredVC
存在时触发。如果我在按下按钮时注销用户,然后将其重新登录,则仍然会出现错误,这可能会影响堆栈,我认为这是因为视图已加载??