首次加载时在UISplitViewController中选择行的iOS

首次加载时在UISplitViewController中选择行的iOS,ios,swift,uisplitviewcontroller,Ios,Swift,Uisplitviewcontroller,我在一个通用应用程序中设置了一个UISplitViewController。它基本上工作正常,但我有一个小问题 iPhone-仅在纵向模式下工作,并正确加载MasterVC(tableview) iPad-适用于纵向和横向 在横向加载时,屏幕上同时显示MasterVC和DetailVC。这很好,我正在MasterVC上的viewdide中运行以下代码,以选择第一行(如果有行): private func selectRowOnFirstLoadIfiPad() { if self.fir

我在一个通用应用程序中设置了一个
UISplitViewController
。它基本上工作正常,但我有一个小问题

iPhone-仅在纵向模式下工作,并正确加载
MasterVC
(tableview) iPad-适用于纵向和横向

在横向加载时,屏幕上同时显示
MasterVC
DetailVC
。这很好,我正在
MasterVC
上的
viewdide
中运行以下代码,以选择第一行(如果有行):

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处于纵向

使用
UISplitViewController
iPad会直接进入
DetailVC
,而
MasterVC
上的
viewdide
永远不会运行(直到用户按下后退按钮)。然后,
tableView
滑到屏幕边缘,
viewdide
最终运行,将用户带到第一行

如果他们以纵向方式启动iPad,我如何避免这种情况并直接加载第一行


谢谢

当您执行该步骤时,我假设您正在基于所选单元格加载详细视图。如果是这种情况,请尝试在主视图控制器的
viewDidLoad
中的
performsguewithidentifier
中发送NSIndexPath作为发送方对象。然后在prepareforsgue()中,检查发送方对象是否为NSIndexPath类型,因为故事板中的segue将是UITableViewCell类。从该nsindepath获取行,并将内容加载到详细视图中

然后在
视图显示中(仍在主视图控制器中),选择行初始行,使其高亮显示

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...
}