我正在使用最后一个UISplitViewController实例的通用应用程序(发布iOS8,适用于iPhone和iPad)
Apple最佳实践说,在一个简单的桌面视图中,打开一个新的详细信息视图,你应该显示一个披露指示器但是当你的splitview显示在iPad上时,你应该没有显示主人的tableview的附件。
所以我在我的cellForRowAtIndexPath函数中提出了这个代码:
cell.accessoryType = self.splitViewController!.collapsed ? .DisclosureIndicator : .None;
这很有效,但有一段时间,splitviewcontroller会更改,例如在iPhone 6 plus上,当您旋转设备时,或在iPad上,当您使用多任务分屏功能时,主表视图应该隐藏或再次显示附件视图,(对于新加载的单元格应该如此),但我需要重新加载整个tableview。
目前,我还没有找到一个在视图更改布局后触发的函数,以触发我的tableview.reloadData()
。
有人能告诉我,最好的做法是重新加载我的tableview并确保当我的splitview布局发生变化时,附件会对所有单元格进行更改吗?
答案 0 :(得分:1)
通过在拆分视图控制器类中实现拆分视图委托方法,可以检测拆分视图是折叠还是拆分。需要您为拆分视图控制器创建自定义类。不确定这会给你带来很多,因为代理可能会在分割发生之前被调用,因此你不能在那一点触发表加载,因为它将获取现有的分割而不是被移动到的分割。
更好的方法是通过注册通知来检测方向是否已更改。通知的好处是它在旋转发生后发送,因此设置了新的方向。然后重新加载,现有的单元格创建代码将完成其余的工作。
override func viewDidLoad() {
super.viewDidLoad()
// Add notification of orientation change
NSNotificationCenter.defaultCenter().addObserver(self, selector: "controllerRotated", name: UIDeviceOrientationDidChangeNotification, object: nil)
}
func controllerRotated(){
if(UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation)){
NSLog("Landscape")
}
else{
NSLog("Portrait")
}
self.tableView.reloadData()
}