我正在创建一个故事板,它将穿过未知的深度。我正在做的是创建一个从 UITableViewCell 到其主视图控制器的循环序列。在 perforSegueWithIdentifier 中,我将信息传递给下一个级别。
一切正常,但问题是我是否想根据该数据分支到详细视图。我不得不求助于带有按钮和幻像视图的黑客。有谁知道这应该如何正式完成?我希望能够将 UITableViewCell 链接到两个不同的控制器,然后在 performSegueWithIdentifier 中决定去哪一个。这可能吗?
我正在创建一个故事板,它将穿过未知的深度。我正在做的是创建一个从 UITableViewCell 到其主视图控制器的循环序列。在 perforSegueWithIdentifier 中,我将信息传递给下一个级别。
一切正常,但问题是我是否想根据该数据分支到详细视图。我不得不求助于带有按钮和幻像视图的黑客。有谁知道这应该如何正式完成?我希望能够将 UITableViewCell 链接到两个不同的控制器,然后在 performSegueWithIdentifier 中决定去哪一个。这可能吗?
我对故事板没有太多经验,但根据我对传统 UITableView 用法的了解,单元格不应该告诉视图控制器要做什么。这样做打破了 MVC 范式。单元格的表视图的委托(通常是显示表视图的视图控制器)将响应该方法tableView:didSelectRowAtIndexPath:
,然后将执行适当的 segue 到下一个视图控制器。
为了显示详细视图,表格视图单元格提供了附件类型UITableViewCellAccessoryDetailDisclosureButton
。使用这种类型时,表视图委托可以响应选择器tableView:accessoryButtonTappedForRowWithIndexPath:
,然后执行必要的 segue 以显示详细视图。
我希望这是有道理的。
我前一段时间做过类似的事情。
我没有找到任何“官方”解决方案,但我找到的一个解决方案是在单元格中添加一个长按手势识别器,除了正常选择之外,它还会引导用户进入详细视图。
然而,唯一的缺点是您必须以某种方式通知用户此“隐藏”选项。
这是 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 中设置两个按钮,一个用于表格向下钻取,另一个用于详细信息。它也可以,但是我的手机太小了,没有太多空间可以放两个按钮。