在NavigationController ios6中返回时调用方法
在NavigationController设置中有许多ViewController,我想知道当用户单击“后退”时是否可以运行代码 基本上,我的应用程序运行一个测试,我想“返回”也停止测试。我知道我可以添加一个单独的停止按钮,但这会更平滑 谢谢 编辑: 我补充说:在NavigationController ios6中返回时调用方法,ios6,delegates,uinavigationcontroller,back,pushviewcontroller,Ios6,Delegates,Uinavigationcontroller,Back,Pushviewcontroller,在NavigationController设置中有许多ViewController,我想知道当用户单击“后退”时是否可以运行代码 基本上,我的应用程序运行一个测试,我想“返回”也停止测试。我知道我可以添加一个单独的停止按钮,但这会更平滑 谢谢 编辑: 我补充说: -(void) navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *
-(void) navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if ([[StdTCPTestViewController class] isSubclassOfClass:[ViewController class]])
NSLog(@"We are going back to VC1");
}
但这会在视图加载时立即调用,而不是在按下“后退”按钮时。在下面的示例中,StdTCPTestViewController是VC2,ViewController是VC1。NavController--VC1--VC2是层次结构,序列从VC1推送到VC2
还有其他的调整吗 假设导航控制器堆栈中有2个VCs:
- 堆栈顶部的VC2(即显示的前VC)
- 堆栈上VC2后面/下面的VC1(即当按下VC2上的back键时,您将返回到的back VC)
-(void) navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if ([[viewController class] isSubclassOfClass:[VC1 class]])
NSLog(@"We are going back to VC1");
}
这是一个UINavigationController委托方法,因此VC2必须通过在.h文件的@interface行末尾添加UINavigationControllerDelegate来采用该协议:
@interface VC2 : UIViewController <UINavigationControllerDelegate>
显然,您还需要将VC1.h文件导入VC2,因为您在上面的委托方法代码中引用了它
希望这有帮助请参见下面的更新答案我对我的上一条评论做了一些编辑,请参见下面的感谢@Spectravideo328的详细回复,我很快就会尝试!我已经添加了您要求的所有代码,现在我有一个问题,即在加载视图时调用代码,而不是在我按下后退按钮时调用代码。我有:-(无效)导航控制器:(UINavigationController*)导航控制器将显示视图控制器:(UIViewController*)视图控制器动画:(BOOL)动画{if([[StdTCPTestViewController类]isSubclassOfClass:[viewController类]])TcpSpeedTestDelete(TestHandle);TestHandle=Nil;[Timer invalidate];NSLog(@“我们将返回VC1”);}是StdTCPTestViewController VC2(前/上VC)还是VC1(后VC)?@DanJamesPalmer,将其更改为:if([[viewController类]isSubclassOfClass:[VC1类]])。这里,viewController指的是在方法名称中传递的VC实例,VC1应该是VC1类的名称,而不是VC2。换句话说,这意味着:如果导航控制器告诉我们将出现的VC属于VC1类,那么请执行。。。。。。因此,保持我的代码不变,只将VC1更改为您的VC1类名。因此,它应该是“如果VC2类是VC1类的子类:?如果是,那么这就是我的方法。我的程序中的VC2是StdTCPTestViewController,VC1是ViewController,请参阅我的操作编辑。是否正确>
self.navigationController.delegate=self;