在UITableViewDataSource类

时间:2017-07-07 18:29:34

标签: ios swift uitableview refactoring

我正在做一个重构因为我的UITableViewController非常臃肿。我要做的第一件事就是从表视图控制器中重构数据源,如下所示:

// In my UITableViewController
let ds = MyDataSource()

func viewDidLoad() {
  tableView.dataSource = ds
}

在我的数据源类中,我想使用一些我认为属于表视图控制器的逻辑。

class MyDataSource: UITableViewDataSource {
  func numberOfSections(in tableView: UITableView) -> Int {
    // I want to use the variable showMore here
    return showMore ? 2 : 1
  }

  // More data source doe
}

变量showMore是在我的表视图控制器中定义的布尔变量,并通过节的页脚视图中的按钮进行更新。

问题是,如果showMore属于表视图控制器,我该如何从我的数据源类访问它?如果它不属于 表视图控制器,它属于哪里,为什么?

谢谢!

2 个答案:

答案 0 :(得分:0)

首先想到的是 - 我只是打字,而不是写在Xcode中......

// footerButtonTap
if let ds = tableView.dataSource as? MyDataSource {
    ds.showMore = !ds.showMore
    tableView.reloadData()
}

或者沿着这些方向的东西可能符合你的需要。

答案 1 :(得分:0)

UITableViewController是Apple方便实现的UIViewController,它包含tableView而不是视图,并且立即符合UITableViewDataSourceUITableViewDelegate。我建议你只使用一个UIViewController并添加一个tableView,然后通过将表的委托和数据源设置为MyCustomTableController来继续,这将符合UITableViewDataSource和{ {1}}。所有逻辑都应在控制器内部处理。