啊哈!我发现了如何去做! Apple iOS 8 sample code on size classes演示了如何做到这一点。
我只在cellForRowAtIndexPath
数据源方法中设置了我的UITableViewCell
实例,当然,每个单元格的创建只调用一次。
Apple的示例代码配置willDisplayCell
委托方法中的表格单元附件视图,并且当发生UISplitViewController
转换时,此方法似乎会在每个可见单元格上自动调用。 :)
编辑:好吧,进一步探索,事实证明它不是自动的。这是一个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)
}
}
}
来源
2016-11-26 23:58:50
TiM
没有用它自己,但它听起来像一个[UISplitViewControllerDelegate(HTTPS作业://开发商.apple.com /参考/ UIKit的/ uisplitviewcontrollerdelegate)。 – pbasdf
理想情况是,但我已经有了一个父视图控制器,我已经在使用'委托'(管理所有当前可见的视图控制器的状态)。我希望在当前的视图控制器级别上有另一种方式接收转换通知。我只是看着'UIViewController'上的' - (void)collapseSecondaryViewController:(UIViewController *)secondaryViewController forSplitViewController:(UISplitViewController *)splitViewController'方法,但这似乎并没有被调用。 – TiM