【问题标题】:How do I achieve a simple drill down hierarchy in a Table View?如何在表视图中实现简单的向下钻取层次结构?
【发布时间】:2015-05-13 02:33:26
【问题描述】:

我必须使用什么方法在 UITableView 中实现简单的向下钻取数据层次结构,而不必在我的故事板中添加不必要数量的表视图?我希望我的主表视图中的每个单元格在被选中时转换到具有自己的单元格的自己的表视图,并且在我的场景中不必有多个表视图。使用 SWIFT。例如:

【问题讨论】:

  • 您不必在情节提要中添加任何您不想添加的内容。可以在 IB 中完成的所有事情也可以通过编程方式完成。只需实现 tableView:didSelectRowAtIndexPath: 并实例化并呈现一个新的 UITableViewController 子类。您需要的子类数量取决于您需要实现多少种不同类型的表。
  • 哦,好吧,这是有道理的@Dare
  • 很抱歉应该更清楚,图中那些标记的框都是一个表格视图中的单元格。我希望每个单元格在被选中时转换到自己的表格视图中,并且这些单元格在被选中时转换到自己的视图中等等。这有意义吗? @敢
  • 是的,这很标准。您需要能够在 tableView:didSelectRowAtIndexPath: 处检查 tableView 的数据源,然后使用 indexPath.row 和 indexPath.section 确定选择了哪个单元格(如果您的表有多个部分)。如果单元格是静态的,我只需在 indexPath.row 的该方法中放置一个开关,您就可以从那里推送您想要的任何控制器。这绝对应该以编程方式完成,而不是在故事板中。追踪这些转折将是一场彻头彻尾的噩梦。
  • 哦,好的,谢谢,是的,这就是两难选择,哈哈。 @敢

标签: ios uitableview swift xcode6


【解决方案1】:

如果您要过渡到的控制器与您绘制的一样(即,您总是希望切换到 A 或 B),则不必复制 A 或 B;您可以在情节提要中每个实例都有一个实例并继续执行。如果您要转换到的控制器都是同一个类,但在转换之前需要一些设置,您可以实现 prepareForSegue(_:sender:) 如下所示:

func prepareForSegue(_ segue: UIStoryboardSegue, sender sender: AnyObject) { 
    let selectedIndex = self.tableView.indexPathForCell(sender as UITableViewCell)
    // set up segue.destinationViewController
}  

如果您可能想要转换到更多类的控制器,那么您可以做一些更复杂的事情并以编程方式处理选择。覆盖tableView:didSelectRowAtIndexPath:

func tableView(_ tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    var vc: ViewController? = nil
    switch indexPath.row { 
        case 0: vc = ViewControllerA()
        case 1: vc = ViewControllerB()
        case 2: vc = ViewControllerC()
        ...
    } 
    navigationController?.pushViewController(vc, animated: true)
}

【讨论】:

  • 对不起,应该更清楚,图中那些标记的框都是一个表格视图中的单元格。我希望每个单元格在被选中时转换到自己的表格视图中,并且这些单元格在被选中时转换到自己的视图中等等。这有意义吗? @ahruss
  • 我已经尝试了大量的开关变体,每次都会崩溃,我最好使用 if 语句吗? @ahruss
  • @RobertTillman 您能找到解决此问题的方法吗? switch case 真的适用于分组部分吗?谢谢!
猜你喜欢
  • 2012-03-15
  • 2018-06-26
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
  • 2020-10-03
相关资源
最近更新 更多