首次加载时在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...
}