拆分视图控制器折叠/展开时更新表格单元附件

时间:2016-11-26 23:06:46

标签: ios uitableview cocoa-touch uikit uisplitviewcontroller

在“设置”应用等应用中,当UISplitViewContoller折叠时,UITableView单元格会显示标准“>”披露配件图标:

Settings app in portrait orientation

在旋转到横向时,如Plus尺寸的iPhone等设备上显示完整的UISplitViewController,公开图标会消失:

Settings app in landscape

最初配置单元时,可以简单地调用self.splitViewController.isCollapsed来查找拆分视图控制器的当前状态。但是,当在该点之后发生转换时,我不确定接收该事件通知的最佳方式是什么。

我考虑过的最简单的解决方案是在视图控制器的self.tableView.reloadData()方法中调用viewWillTransitionToSize,但这似乎是一种非常“强力”的方法。

有没有人做过这种实施?你是怎么解决的?

1 个答案:

答案 0 :(得分:0)

啊哈!我发现了怎么做! Apple iOS 8 sample code on size classes演示了如何操作。

我只在file_get_contents_curl("https://graph.facebook.com/v2.6/$pageFBID/feed?fields=full_picture,message,story,created_time,shares,likes.limit(1).summary(true),comments.limit(1).summary(true)&access_token=".$token); 数据源方法中设置UITableViewCell个实例,当然,每个单元格的创建只调用一次。

Apple的示例代码在cellForRowAtIndexPath委托方法中配置表格单元附件视图,并且当发生willDisplayCell转换时,此方法似乎在每个可见单元格上自动调用。 :)

编辑:好的,经过进一步探索,结果证明它不是自动的。它是UISplitViewController

这是Apple Sample应用程序的代码。在视图控制器的NSNotification中:

viewDidLoad

通知触发的方法:

override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(ListTableViewController.showDetailTargetDidChange(_:)), name: NSNotification.Name.UIViewControllerShowDetailTargetDidChange, object: nil)
}