在拆分视图控制器 Collapses/Expands 时更新 Table 单元格附件
Updating Table Cell Accessory when Split View Controller Collapses/Expands
在“设置”应用等应用中,当 UISplitViewContoller
折叠时,UITableView
单元格会显示标准的“>”披露附件图标:
在像大号 iPhone 这样的设备上,当旋转到横向并且整个 UISplitViewController
变得可见时,公开图标消失:
最初配置单元格时,可以简单地调用 self.splitViewController.isCollapsed
来了解拆分视图控制器的当前状态。但是,当在该点之后发生转换时,我不确定接收该事件通知的最佳方式是什么。
我考虑过的最简单的解决方案是在视图控制器的 viewWillTransitionToSize
方法中调用 self.tableView.reloadData()
,但这似乎是一种真正的 'brute-force' 方法。
有人做过这种实现吗?你是怎么解决的?
啊哈!我发现了怎么做! Apple iOS 8 sample code on size classes 演示了如何操作。
我只在 cellForRowAtIndexPath
数据源方法中设置我的 UITableViewCell
实例,当然,每个单元格的创建只调用一次。
Apple 的示例代码在 willDisplayCell
委托方法中配置 table 单元格附件视图,并且 当一个 [=15] =] 转换发生。 :)
编辑: 好吧,经过进一步探索,事实证明它不是自动的。这是一个 NSNotification
。
这是来自 Apple 示例应用程序的代码。在视图控制器的 viewDidLoad
:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(ListTableViewController.showDetailTargetDidChange(_:)), name: NSNotification.Name.UIViewControllerShowDetailTargetDidChange, object: nil)
}
以及通知触发的方法:
func showDetailTargetDidChange(_ notification: Notification) {
/*
Whenever the target for showDetailViewController: changes, update all
of our cells (to ensure they have the right accessory type).
*/
for cell in tableView.visibleCells {
if let indexPath = tableView.indexPath(for: cell) {
tableView(tableView, willDisplay: cell, forRowAt: indexPath)
}
}
}
在“设置”应用等应用中,当 UISplitViewContoller
折叠时,UITableView
单元格会显示标准的“>”披露附件图标:
在像大号 iPhone 这样的设备上,当旋转到横向并且整个 UISplitViewController
变得可见时,公开图标消失:
最初配置单元格时,可以简单地调用 self.splitViewController.isCollapsed
来了解拆分视图控制器的当前状态。但是,当在该点之后发生转换时,我不确定接收该事件通知的最佳方式是什么。
我考虑过的最简单的解决方案是在视图控制器的 viewWillTransitionToSize
方法中调用 self.tableView.reloadData()
,但这似乎是一种真正的 'brute-force' 方法。
有人做过这种实现吗?你是怎么解决的?
啊哈!我发现了怎么做! Apple iOS 8 sample code on size classes 演示了如何操作。
我只在 cellForRowAtIndexPath
数据源方法中设置我的 UITableViewCell
实例,当然,每个单元格的创建只调用一次。
Apple 的示例代码在 willDisplayCell
委托方法中配置 table 单元格附件视图,并且 当一个 [=15] =] 转换发生。 :)
编辑: 好吧,经过进一步探索,事实证明它不是自动的。这是一个 NSNotification
。
这是来自 Apple 示例应用程序的代码。在视图控制器的 viewDidLoad
:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(ListTableViewController.showDetailTargetDidChange(_:)), name: NSNotification.Name.UIViewControllerShowDetailTargetDidChange, object: nil)
}
以及通知触发的方法:
func showDetailTargetDidChange(_ notification: Notification) {
/*
Whenever the target for showDetailViewController: changes, update all
of our cells (to ensure they have the right accessory type).
*/
for cell in tableView.visibleCells {
if let indexPath = tableView.indexPath(for: cell) {
tableView(tableView, willDisplay: cell, forRowAt: indexPath)
}
}
}