我有一个UIViewController
子类,它本身就是subclassed
到许多自定义UIViewControllers
中。它包含一种检查身份验证信息的方法,如果身份验证失败,它应该segue
到特定的view
。我正在考虑为此目的使用UIStoryboardSegue's *"segueWithIdentifier"*
方法。问题是,我为destination
参数指定了什么,即如何获得与我想要的UIViewController
相关的destinationviewcontroller
实例?
答案 0 :(得分:0)
我担心这并不容易,因为你的视图控制器的子类可能会转到不同的视图控制器,如果你想通过segue这样做,那么所有的segue都会有所不同。我认为最好的解决方案是让您的孩子查看控制器决定要触发哪个segue(哪个视图存在/推送)。 将您的检查身份验证方法添加到父视图控制器
-(void)checkAuthentication
{
if (userAuthenticated)
{
[self userAuthenticatedMethod];
}
else
{
// if you want to go to the same view controller if user not authenticated you can
// perfoem segue like that:
[self performSegueWithIdentifier:@"failedSegue" sender:nil];
// but if it depends on the view controller you are in do it like that
[self userNotAuthenticatedMethod];
}
}
将此方法的声明添加到.h文件并将空实现放入.m文件:
//in .h
-(void)userAuthenticatedMethod;
//just if you need it
//-(void)userNotAuthenticatedMethod;
//in .m
-(void)userAuthenticatedMethod
{
//override in child
}
//just if you need it
//-(void)userNotAuthenticatedMethod
{
//override in child
}
现在,在每个子视图控制器中,您需要实现userAuthenticatedMethod方法,如果需要,还需要userNotAuthenticatedMethod。 如果您想使用segue,请执行以下操作:
-(void)userAuthenticatedMethod
{
[self performSegueWithIdentifier:@"yourSegue" sender:nil];
}
您还可以以编程方式添加视图控制器以查看层次结构。在此方案中,每个子视图控制器负责将另一个视图添加到视图层次结构中。 如果需要传递数据,可以在所需的每个子VC中覆盖prepareForSegue:方法。