Swift 3执行segue

时间:2017-09-06 12:33:27

标签: swift uitableview segue

我有三个与segue连接的控制器。 控制器1是MyNotif,控制器2是AddNotif,控制器3是SelectInterval。

从控制器2我有一个segue到控制器3然后回到控制器2。 这是因为在控制器3中,我将从tableview中选择一个值(字符串),该值将插入控制器2的字段中。

当执行从3到2的segue时,控制器不会被解雇。这意味着如果从控制器2我按下后退按钮(我不使用导航控制器,后退按钮是一个简单的按钮。这里的代码是:)

@IBAction func backBtnPressed(_ sender: Any) {
    dismiss(animated: true, completion: nil)
}

我将降落在控制器3上,而不是控制器3上。

总结一下,我试图实现这个目标:

从控制器1我转到控制器2.从这里我可以进入控制器3,选择我需要的字符串,执行segue,返回控制器2(直到这里一切正常)。一旦回到控制器2上,我点击后退按钮我想回到控制器1上(现在发生的事情是我回到控制器3上)。

有点复杂的解释......希望它有点清楚。

enter image description here

这是我的segue代码: AddNotif:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "SelectRepeatInterval" {
        if let destination = segue.destination as? SelectRepeatIntervalVC {
            destination.selectedRepeatingInterval = repeatingInterval
        }
    }
}

SelectInterval:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    // Get Cell Label
    let indexPath = tableView.indexPathForSelectedRow!
    let currentCell = tableView.cellForRow(at: indexPath)! as! SelectRepetaIntervalCell
    selectedInterval = currentCell.repeatIntervalLbl.text!
    performSegue(withIdentifier: "IntervalSelected", sender: self)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "IntervalSelected" {
        if let destination = segue.destination as? AddNotificationVC {
            destination.repeatingInterval = selectedInterval
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您正在寻找的是呈现ViewController https://developer.apple.com/documentation/uikit/uiviewcontroller/1621430-presentingviewcontroller

if let destination = self.presentingViewController as? AddNotificationVC {
            destination.repeatingInterval = selectedInterval
}
dismiss(animated: true, completion: nil)

这是完整的代码

tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
 // Get Cell Label
 let currentCell = tableView.cellForRow(at: indexPath)! as! SelectRepetaIntervalCell
 selectedInterval = currentCell.repeatIntervalLbl.text!
 if let destination = self.presentingViewController as? AddNotificationVC { 
   destination.<your textfield name>.text = selectedInterval 
 }
 dismiss(animated: true, completion: nil) 
}