我有一个指向UIViewController的UINavigationController。在那个UIViewController中,我希望导航项目的右键是一个.Add UIBarButtonItem,它会分割到另一个名为" nextScene"的场景。
我的理解是我需要让行动成为" performSegueWithidentifier"方法,如果我想以编程方式创建此segue。这就是我所拥有的:
let plusButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "performSegueWithIdentifier:")
self.navigationItem.setRightBarButtonItem(plusButton, animated: true)
进入另一个名为" nextScene"的场景的正确语法是什么?我的performSegueWithidentifier方法应如何处理?
编辑: 得到以下错误:无法识别的选择器发送到实例... 2015-08-06 07:57:18.534 .. [...] ***由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因: ' - [... goToSegue:]:无法识别的选择器发送到实例....
以下是我用于segue的代码:
let plusButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "goToSegue:")`
self.navigationItem.setRightBarButtonItem(plusButton, animated: true) }
func goToSegue() {
performSegueWithIdentifier("segueName", sender: self)
}
答案 0 :(得分:5)
UIViewController
之间创建segue(右键点击firstViewController
并将其拖至secondviewcontroller
)segue
segue
名称segue
醇>
现在,为了使用UIBarButtonItem
执行segue,请将viewDidLoad
方法中的以下代码添加到firstViewController
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: "navigateToNextViewController")
// Do any additional setup after loading the view, typically from a nib.
}
现在创建navigateToNextViewController
方法并从该方法执行segue
func navigateToNextViewController(){
self.performSegueWithIdentifier("goNext", sender: self)
}
答案 1 :(得分:2)
您可以在故事板中控制+从UIBarButtonItem拖动到UIViewController(或其他类型的控制器)。
如果您想通过代码执行此操作,则需要使用目标类中可以处理它的方法备份您的操作调用。 performSegueWithIdentifier是视图控制器的默认方法,所以我会调用另一个函数然后调用performSegueWithIdentifier,如下所示:
let plusButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "plusBttnTouched:")
func plusBttnTouched(sender: UIBarButtonItem) {
performSegueWithIdentifier(identifier: "segueNameHere", sender: self)
}
这是一个更新的代码示例:
故事板:
代码:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Create bar button item
let plusButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Action, target: self, action: Selector("plusBttnTouched:"))
self.navigationItem.rightBarButtonItems = [plusButton]
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//MARK: - Actions
func plusBttnTouched(sender: UIBarButtonItem) {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.performSegueWithIdentifier("plusViewController", sender: self)
})
}
}
在method参数中使用sender可以访问方法中已定义类型的实例。你说你想要这个,当你在选择器的末尾添加一个时,它不是必需的。