我在视图上有2 UIButtons
。
每个都链接到2个不同的视图。
他们必须根据您刚刚点击的按钮传递不同的数据。
我知道segue
有不同的方式,但我想为每个使用prepareForSegue
版本(对于我来说,在故事板和某些代码上绘制segue
似乎更清楚解释发生的事情。)
我试过了......
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue != "historySegue") {
let controller = segue.destinationViewController as! ResultViewController
controller.match = self.match
} else {
let controller = segue.destinationViewController as! HistoryViewController
controller.history = self.history
}
}
@IBAction func showHistory(sender: UIButton) {
performSegueWithIdentifier("historySegue", sender: self)
}
@IBAction func match(sender: UIButton) {
performSegueWithIdentifier("matchSegue", sender: self)
}
但是当我点击按钮时出现错误
(lldb)
答案 0 :(得分:17)
取出您的IBActions(确保通过Interface Builder中的右侧栏以及您的代码在Connections Inspector中删除它们)。对于segues,只需使用Interface Builder,确保两个segue的标识符都正确,然后尝试这个prepareForSegue方法:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "matchSegue" {
let controller = segue.destinationViewController as! ResultViewController
controller.match = self.match
} else if segue.identifier == "historySegue" {
let controller = segue.destinationViewController as! HistoryViewController
controller.history = self.history
}
}
答案 1 :(得分:4)
你可以切换它......
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let identifier = segue.identifier {
switch identifier {
case "matchSegue":
let controller = segue.destinationViewController as! ResultViewController
controller.match = self.match
case "historySegue":
let controller = segue.destinationViewController as! HistoryViewController
controller.history = self.history
}
}
}
答案 2 :(得分:1)
您应该将segue.identifier
与不是segue的字符串进行比较:
segue.identifier == "historySegue"
它不会解决您的问题,但以后会有所帮助。
我相信你添加了一个断点,你的应用就停止了。删除断点,它将起作用。
答案 3 :(得分:0)
prepareForSegue具有两个不同的segues 当您单击按钮时,uialert控制器将显示它将为您提供三个选项:“物理”,“ 2。在线”和“ 3.取消”。
@objc func twoSegues(sender : UIButton) {
let alert = UIAlertController(title: "Update Request", message: "Are you sure to update the record!", preferredStyle: .alert)
let yes = UIAlertAction(title: "Yes", style: .default, handler: { [weak self] (UIAlertAction) in
if(serviceType == "physical") {
DispatchQueue.main.async {
self?.performSegue(withIdentifier: "physical", sender: self?.myArray[id!].serviceID)
}
}
if(serviceType == "online") {
DispatchQueue.main.async {
self?.performSegue(withIdentifier: "online", sender: self?.myArray[id!].serviceID)
}
}
})
let no = UIAlertAction(title: "No", style: .default, handler: nil)
alert.addAction(yes)
alert.addAction(no)
self.present(alert, animated: true, completion: nil)
}
}
答案 4 :(得分:0)
为了在目标C 中导航不同的话题,您需要执行以下操作。
自定义代码,如下所示,这是一个示例:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString:@"segueNumberOne"]){
YourViewController *functionalityViewController = [segue destinationViewController];
functionalityViewController.someProperty = someValue;
NSLog(@"move to segue number 1");
}else if ([segue.identifier isEqualToString:@"segueNumberTwo"]){
NSLog(@"move to segue number 2");
}