未在 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
;你只需在你的视图控制器中实现这个方法。
这是我在其中注册 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
;你只需在你的视图控制器中实现这个方法。