iOS - 使用可变源/目标进行搜索

时间:2014-02-07 03:20:03

标签: ios objective-c segue uistoryboardsegue

我有一个UIViewController子类,它本身就是subclassed到许多自定义UIViewControllers中。它包含一种检查身份验证信息的方法,如果身份验证失败,它应该segue到特定的view。我正在考虑为此目的使用UIStoryboardSegue's *"segueWithIdentifier"*方法。问题是,我为destination参数指定了什么,即如何获得与我想要的UIViewController相关的destinationviewcontroller实例?

1 个答案:

答案 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:方法。