如何在 swift 中长按 UITableViewCell 调用另一个控制器?

How to call another controller on long press of UITableViewCell in swift?

我正在使用下面的代码来显示 MyEditViewControllerMyEditViewController 中的所有字段插座都是 nil 因为这条线 let editController = MyEditViewController() .我在这里创建新实例。所以网点现在是 nil。有没有其他方法可以调用编辑控制器而不创建它的实例?

@IBAction func editMethod(sender: UILongPressGestureRecognizer) {
        if sender.state == UIGestureRecognizerState.Began {
            let cell = sender.view as! MyTableViewCell
            let editController = MyEditViewController()
            editController.sample= samples[cell.tag]
            presentViewController(editController, animated: true, completion: nil)
        }
    }

您不应启动 Class,而应将其作为故事板中的 ViewController 启动。因此,在您的情况下,为您的控制器设置一个 "Storyboard-ID"。

然后使用:

    let editController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("StoryboardID") as! MyEditViewController

所以所有的网点都应该工作正常。

要用您的网点实例化一个新控制器,您可以使用 xib

let editController = MyEditViewController(nibName: "MyEditViewController", bundle: nil)

或者您可以将 StoryboardId 归因于您的控制器并与 instantiateViewControllerWithIdentifier

一起使用
let editController = storyboard?.instantiateViewControllerWithIdentifier("MyEditViewControllerStoryboardId") as! MyEditViewController

或者作为对您案例的建议,您可以使用不同的方法使用故事板转场。 Read more about it here

performSegueWithIdentifier("PresentMyEditController", sender: self)