Ios 创建和执行不带故事板的segue
我得到了一个没有故事板的应用程序,所有的UI创建都是在代码中进行的,我得到了一个Ios 创建和执行不带故事板的segue,ios,iphone,xcode,swift,Ios,Iphone,Xcode,Swift,我得到了一个没有故事板的应用程序,所有的UI创建都是在代码中进行的,我得到了一个splitView,我会让它在iPhone上可用,因为这个应用程序最初只为iPad设计,所以当你在主视图中选择列表中的一行时,它在iPhone上没有任何作用,但在iPad上运行良好 因此,我的问题是,我能否创建并执行允许在didselectRowatinexPath方法上显示细节视图的序列 以下是我迄今为止所做的工作: override func tableView(tableView: UITableView, d
splitView
,我会让它在iPhone上可用,因为这个应用程序最初只为iPad设计,所以当你在主视图中选择列表中的一行时,它在iPhone上没有任何作用,但在iPad上运行良好
因此,我的问题是,我能否创建并执行允许在didselectRowatinexPath
方法上显示细节视图的序列
以下是我迄今为止所做的工作:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let segue = UIStoryboardSegue(identifier: "test", source: self, destination: detailViewController!)
performSegueWithIdentifier("test", sender: self)
}
但当运行并选择一行时,应用程序崩溃,告诉它需要一个performhandler,因此我添加了以下内容:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let segue = UIStoryboardSegue(identifier: "test", source: self, destination: detailViewController!, performHandler: { () -> Void in
let object = self.fetchedResultsController.objectAtIndexPath(indexPath)
let controller = self.detailViewController!
controller.detailItem = object
controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
controller.navigationItem.leftItemsSupplementBackButton = true
})
performSegueWithIdentifier("test", sender: self)
}
现在,当选择一行时,xcode表示不存在具有此类标识符“test”的segue
我还尝试通过segue.perform()
调用它,并将performHandler内容添加到PrepareForSegue方法中:
if segue.identifier == "test" {
if let indexPath = self.tableView.indexPathForSelectedRow {
let object = self.fetchedResultsController.objectAtIndexPath(indexPath)
let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController
controller.detailItem = object
controller.navigationItem.leftBarButtonItem = self.splitViewController?.displayModeButtonItem()
controller.navigationItem.leftItemsSupplementBackButton = true
}
}
它什么也不做,不崩溃,只突出显示我选择的行,就这样
你们能帮帮我吗
编辑:正如Oleg Gordichuk所说,没有故事板我不可能做我想做的事情,所以感谢他的帮助:)Segue它是故事板交互的组成部分,可以从类的名称
UIStoryboardSegue
来理解。以编程方式创建segue是个坏主意。如果我没有犯错误,故事板会为您创建它们
要解决您的问题,请尝试使用一些常见的方法,如简单呈现ViewController
let vc = self.storyboard?.instantiateViewControllerWithIdentifier("id") as! MyController
self.presentViewController(vc, animated: true, completion: nil)
我从我们在评论中的对话中了解到。您希望使用不带故事板的segues为tableview到details视图创建导航。目前,没有故事板是不可能做到这一点的
对于将来的学习,请尝试对此进行调查。一种方法是使用
didSelectRow
方法查看tableView
Swift 3.x
// MARK: - Navigation & Pass Data
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("Selected Row \(indexPath.row)")
let nextVC = YourNextViewController()
nextVC.YourLabel.text = "Passed Text"
nextVC.YourLabel.text = YourArray[indexPath.row]
// Push to next view
navigationController?.pushViewController(nextVC, animated: true)
}
感谢您的回答,我尝试了pushViewController,它正在替换视图,并在iPhone 6 Plus和6S Plus处于横向模式时造成问题。您的解决方案对我不起作用,因为我没有任何故事板,因此self.storyboard始终返回nil,但我已将splitView中的两个控制器引用到AppDelegate文件中,但仍然不起作用“应用程序试图以模式呈现活动控制器”使用navigationcontroller在其上显示视图控制器。尝试使用:let navC=UINavigationController(rootViewController:shared.mediaListController)self.presentViewController(navC,动画:true,完成:nil)它可以工作,但不是我想要的^^我只是想让细节视图像iPhone上的主/细节视图的xcode示例一样显示你想从tableview显示细节视图?是的,正是因为它在iPad上工作良好,因为iPhone和iPad对SplitView的处理方式不同,6S Plus和6S Plus出现了例外,这给我带来了很多问题^^^就像xcode示例一样,只需单击一行,就会出现详细视图(我目前使用的是pushViewController,这似乎会阻止iPhone 6 Plus上的一切)