我想在拆分视图控制器的详细视图中添加导航控制器级别但是当我这样做时,我无法使用我的know方法来测试类类型:
例如,如果我在细节方面没有导航控制器级别,我可以成功完成此操作:
- (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
。
如何测试此方案的目标控制器,以便我可以将数据传递给它?
答案 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
}
}
}