Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 创建和执行不带故事板的segue_Ios_Iphone_Xcode_Swift - Fatal编程技术网

Ios 创建和执行不带故事板的segue

Ios 创建和执行不带故事板的segue,ios,iphone,xcode,swift,Ios,Iphone,Xcode,Swift,我得到了一个没有故事板的应用程序,所有的UI创建都是在代码中进行的,我得到了一个splitView,我会让它在iPhone上可用,因为这个应用程序最初只为iPad设计,所以当你在主视图中选择列表中的一行时,它在iPhone上没有任何作用,但在iPad上运行良好 因此,我的问题是,我能否创建并执行允许在didselectRowatinexPath方法上显示细节视图的序列 以下是我迄今为止所做的工作: override func tableView(tableView: UITableView, d

我得到了一个没有故事板的应用程序,所有的UI创建都是在代码中进行的,我得到了一个
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上的一切)