iOS在第一次加载时在UISplitViewController中选择行

时间:2014-11-07 06:26:59

标签: ios swift uisplitviewcontroller

我在通用应用中设置了UISplitViewController。它大部分工作正常,但我有一个小问题。

iPhone - 仅适用于Portrait并正确加载MasterVC(tableview) iPad - 适用于人像和风景

带有横向的

加载屏幕上显示MasterVCDetailVC。这很好,我在viewDidAppear的{​​{1}}中运行以下代码,如果存在行,则选择第一行:

MasterVC

我的问题是,如果用户在纵向中使用iPad启动应用程序。

使用private func selectRowOnFirstLoadIfiPad() { if self.firstLoad && UIDevice.currentDevice().userInterfaceIdiom == .Pad { if self.fetchedResultsController.sections?.count != nil { let rowToSelect:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0); self.myTableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition:UITableViewScrollPosition.None) self.performSegueWithIdentifier("mySegue", sender: self) } self.firstLoad = !self.firstLoad } } ,iPad直接转到UISplitViewControllerDetailVC上的viewDidAppear永远不会运行(直到用户按下“返回”按钮)。然后MasterVC滑到屏幕边缘,tableView最终运行,将用户带到第一行。

如果他们在Portrait中启动iPad,我该如何避免这种情况并立即加载第一行?

由于

1 个答案:

答案 0 :(得分:1)

当您执行segue时,我假设您正在根据所选单元格加载详细信息视图。如果是这种情况,请尝试在主视图控制器的performSegueWithIdentifier中的viewDidLoad中发送NSIndexPath作为发件人对象。然后在prepareForSegue()中,检查发送方对象是否为NSIndexPath类型,因为storyboard中的segue将是UITableViewCell类。从该NSIndexPath获取行并将内容加载到详细视图中。

然后在viewDidAppear(仍在主视图控制器中),选择行初始行,使其突出显示。

func viewDidLoad() {
  // ...
  var initialIndexPath = NSIndexPath(forRow: 0, inSection: 0)
  self.performSegueWithIdentifier("mySegue", sender: initialIndexPath)
}

func viewDidAppear(_ animated: Bool) {
  // ...
  var initialIndexPath = NSIndexPath(forRow: 0, inSection: 0)
  self.myTableView.selectRowAtIndexPath(initialIndexPath, animated: true, scrollPosition:UITableViewScrollPosition.None)
}

func prepareForSegue(_ segue: UIStoryboardSegue, sender sender: AnyObject?) {
  // ...
  if (sender.isKindOfClass(UITableViewCell) {
    // Get row from selected row in tableview
  } else if (sender.isKindOfClass(NSIndexPath) {
    // Get row from sender, which is an NSIndexPath
  } else {
    // Handle a default case
  }
  // Prepare the detail view with the index...
}