斯威夫特:准备两个不同的段落

时间:2015-07-16 14:37:11

标签: xcode swift segue

我在视图上有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)

5 个答案:

答案 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 中导航不同的话题,您需要执行以下操作。

  1. 在情节提要上单击实际的关卡
  2. 转到属性检查器,并重命名segue的标识符
  3. 自定义代码,如下所示,这是一个示例:

    -(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");
    }