我正在创建一个将通过未知深度的故事板。我正在做的是从UITableViewCell创建一个循环segue到它的主视图控制器。在perforSegueWithIdentifier中,我传递的信息是下一个级别。
一切正常,但问题是我是否想要根据该数据分支到详细视图。我不得不求助于带有按钮和幻影视图的黑客。有谁知道这应该如何正式完成?我希望能够将UITableViewCell链接到两个不同的控制器,然后决定在performSegueWithIdentifier中去哪个控制器。这有可能吗?
答案 0 :(得分:1)
我对故事板没有多少经验,但从我所知的传统UITableView用法来看,单元格不应该告诉视图控制器要做什么。这样做打破了MVC范式。单元格的表视图的委托(通常是显示表视图的视图控制器)将响应方法tableView:didSelectRowAtIndexPath:
,然后将执行适当的segue到下一个视图控制器。
为了显示详细视图,表格视图单元格提供附件类型UITableViewCellAccessoryDetailDisclosureButton
。使用此类型时,表视图委托可以响应选择器tableView:accessoryButtonTappedForRowWithIndexPath:
,然后执行必要的segue以显示详细视图。
我希望这是有道理的。
答案 1 :(得分:0)
我之前做过类似的事情。
我没有找到任何“官方”解决方案,但我找到的一个解决方案是向细胞添加长按手势识别器,除了正常选择外,还引导用户进入细节视图。
但唯一的缺点是,您可以通过某种方式告知用户此“隐藏”选项。
这是viewDidLoad中的代码片段:
UILongPressGestureRecognizer *taskDetail = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(showTaskDetail:)];
taskDetail.minimumPressDuration=0.5f;
taskDetail.numberOfTouchesRequired=1;
[self.myTableView addGestureRecognizer:taskDetail];
然后在我的taskDetail:
-(IBAction)showTaskDetail:(id)sender {
UILongPressGestureRecognizer *gesture = (UILongPressGestureRecognizer*)sender;
if (gesture.state == UIGestureRecognizerStateBegan) {
CGPoint p = [gesture locationInView:TV];
NSIndexPath *indexPath = [self.myTableView indexPathForRowAtPoint:p];
MyManagedObj *obj = [self.datasource objectAtIndex:indexPath.row];
// other operations omitted...
// then perform segue...
[self performSegueWithIdentifier:@"taskDetail" sender:indexPath];
}
}
我尝试过的其他解决方案是UITableViewCell中的两个按钮,一个用于表向下钻取,另一个用于细节。它也有效,但我的手机太小了,两个按钮没有多少空间。