在UISplitViewController中刷新附件类型的最佳做法是什么?

时间:2015-09-29 18:37:27

标签: ios swift uikit

我正在使用最后一个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布局发生变化时,附件会对所有单元格进行更改吗?

1 个答案:

答案 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()        
}