分割控制器详细信息视图指向导航控制器时测试目标视图控制器

时间:2014-05-18 23:15:16

标签: ios objective-c

我想在拆分视图控制器的详细视图中添加导航控制器级别但是当我这样做时,我无法使用我的know方法来测试类类型:

例如,如果我在细节方面没有导航控制器级别,我可以成功完成此操作:

enter image description here

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    id detail = self.splitViewController.viewControllers[1];

    if ([detail isKindOfClass:[myDetailTVC class]]) {
        //send data to destination controller
    }   
}

如果我添加导航控制器级别,则self.splitViewController.viewControllers[1];将返回UINavigationController而不是我的目标控制器myDetailTVC

enter image description here

如何测试此方案的目标控制器,以便我可以将数据传递给它?

2 个答案:

答案 0 :(得分:2)

您可以使用内省以相同的方式检查UINavigationController。

不检查对象isKindOfClass: myDetailTVC,而是检查对象isKindOfClass: UINavigationController。一旦你发现对象isKindOfClass: UINavigationController访问UINavigationController堆栈上的topViewController,在这种情况下是rootViewController或myDetailTVC。

示例:

    id object = self.splitViewController.viewControllers[1];

    if ([object isKindOfClass:[UINavigationController class]])
    {
        // We have a navigation controller
        UINavigationController * navigationController = (UINavigationController *)object;

        // Since the only ViewController in the navigationController's stack is the 
        // rootViewController the topViewController will be myDetailTVC
        MyDetailTVC * detailViewController = (MyDetailTVC *)navigationController.topViewController;
    }  

答案 1 :(得分:0)

如果我理解正确,您可以将值传递给viewController但是如何传递给导航控制器。

让我们说NavController是导航控制器

选项1:

 if ([detail isKindOfClass:[NavController class]]) {
    //send data to destination nag controller using the property visible view controller
   [detail.visibleViewController setData:data];
 }

选项2:

if ([detail isKindOfClass:[NavController class]]) {
    //send data to destination nag controller using the property visible view controller
       for (UIViewController *controller in [contr viewControllers])
       {
          if ([controller isKindOfClass:[myDetailTVC Class])
          {
              //Do Task here
          }
       }
}