未在 UIBarButtonItem 选择器中调用 prepareForSegue

prepareForSegue not being called inside UIBarButtonItem selector

这是我在其中注册 UIBarButtonItems 及其选择器函数的代码。

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    var edit = UIBarButtonItem(title: "Edit", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("editTruck"))
    let delete = UIBarButtonItem(title: "Delete", style: UIBarButtonItemStyle.Plain, target: self, action: "deleteTruck")
    let menu = UIBarButtonItem(image: UIImage(named: "menu"), style: UIBarButtonItemStyle.Plain, target: self.revealViewController(), action: "rightRevealToggle:")

    self.navigationItem.rightBarButtonItems = [menu,delete,edit]

    self.title = truckName.text

    self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
    self.view.addGestureRecognizer(self.revealViewController().tapGestureRecognizer())
}

func editTruck(){

    println("insdie edittruck")

    self.performSegueWithIdentifier("editTruck", sender: self)

     func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
    println("inside prepare")            
        if segue.identifier == "editTruck"{
            let vc = segue.destinationViewController as? UINavigationController
            let topView = vc?.topViewController as! AddTruckViewController
            topView.truckNameValue = name.text!
            topView.totalFuelupsValue = totalFuelups.text!
            topView.totalDistanceTrackedValue = totalDistanceTracked.text!
            topView.truckYearValue = truckYear.text!
            topView.truckMakeValue = truckMake.text!
            topView.truckModelValue = truckModel.text!
            topView.truckImagevalue = truckImage.image!
            topView.engineMakeValue = engineMake.text!
            topView.engineModelValue = engineModel.text!
            topView.horsePowerValue = horsePower.text!
            topView.axleValue = axle.text!
            topView.trailerTypeValue = trailerType.text!
            topView.steerTireMakeValue = steerTireMake.text!
            topView.steerTireModelValue = steerTireModel.text!
            topView.steerTireSizeValue = steerTireSize.text!
            topView.driveTireMakeValue = driveTireMake.text!
            topView.driveTireModelValue = driveTireModel.text!
            topView.driveTireSizeValue = driveTireSize.text!
            topView.transmissionMakeValue = transmissionMake.text!
            topView.transmissionModelValue = transmissionModel.text!
            topView.distanceUnitValue = distanceUnit.text!
            topView.volumeUnitValue = volumeUnit.text!
        }
    }
}

在 IB 中,我将控件从 TruckSpecsViewController(顶部的黄色图标,因为我的按钮是通过编程方式创建的)拖到上面的代码的来源,到我想要继续的场景。我将标识符添加到 "editTruck" 的那个 segue 中。在上面的代码中,performSegueWithIdentifier 有效,但 prepareForSegue 无效。没有错误或任何它永远不会被调用的东西。

如有任何帮助,我们将不胜感激。

prepareForSegue:sender 方法移动到与视图控制器中的 editTruck 方法相同的级别。更改范围将解决您的问题。

iOS 自动调用视图控制器上的 prepareForSegue:sender 方法,以响应 Storyboard 中的 segue 或通过在代码中调用 performSegueWithIdentifier:sender:

您从不给自己打电话 prepareForSegue:sender;你只需在你的视图控制器中实现这个方法。