使用 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 的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

UI元素的动画?

访问 UITabBarController 以通过 Storyboards 分配操作

在Python中展平未知深度的字典列表(等)的字典列表(噩梦般的JSON结构)

如何使用 Storyboards/Cocoa 在 Swift 3.x 中引用视图的窗口

UINavigationController 中的 UITableViewController 表示未知深度的树结构

深度 | 刘群:基于深度学习的自然语言处理,边界在哪里?