使用 Storyboards 处理未知深度的 UITableView 的最佳方法
Posted
技术标签:
【中文标题】使用 Storyboards 处理未知深度的 UITableView 的最佳方法【英文标题】:Best way to deal with UITableView of Unknown depth with Storyboards 【发布时间】:2012-12-17 19:49:15 【问题描述】:我正在创建一个将穿越未知深度的故事板。我正在做的是创建一个从 UITableViewCell 到其主视图控制器的循环序列。在 perforSegueWithIdentifier 中,我将信息传递给下一个级别。
一切正常,但问题是如果我想根据该数据分支到详细视图。我不得不求助于带有按钮和幻像视图的黑客。有谁知道这应该如何正式完成?我希望能够将 UITableViewCell 链接到两个不同的控制器,然后在 performSegueWithIdentifier 中决定去哪一个。这可能吗?
【问题讨论】:
UINavigationController
它们嵌入在 UINavigationControllers 中,是的。谢谢谷歌。还有什么事情吗?
我实际上能够让它像这样运行,它只是有点......混乱。 i.imgur.com/OrXcE.png
【参考方案1】:
我对故事板没有太多经验,但根据我对传统 UITableView 用法的了解,单元格不应该告诉视图控制器要做什么。这样做打破了 MVC 范式。单元格的表视图的委托(通常是显示表视图的视图控制器)将响应方法tableView:didSelectRowAtIndexPath:
,然后将执行适当的转接到下一个视图控制器。
为了显示详细视图,表格视图单元格提供了附件类型UITableViewCellAccessoryDetailDisclosureButton
。使用这种类型时,table view delegate 可以响应选择器tableView:accessoryButtonTappedForRowWithIndexPath:
,然后执行必要的 segue 以显示详细视图。
我希望这是有道理的。
【讨论】:
是的,看起来这是目前最好的方法【参考方案2】:我之前做过类似的事情。
我没有找到任何“官方”解决方案,但我找到的一个解决方案是在单元格中添加一个长按手势识别器,除了正常选择之外,它还可以引导用户进入详细视图。
但唯一的缺点是您必须以某种方式通知用户此“隐藏”选项。
这是 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 中设置两个 a 按钮,一个用于表格向下钻取,另一个用于详细信息。它也可以,但是我的单元太小了,没有多少空间可以放两个按钮。
【讨论】:
以上是关于使用 Storyboards 处理未知深度的 UITableView 的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章
访问 UITabBarController 以通过 Storyboards 分配操作
在Python中展平未知深度的字典列表(等)的字典列表(噩梦般的JSON结构)
如何使用 Storyboards/Cocoa 在 Swift 3.x 中引用视图的窗口