【问题标题】:Segue specific value in prepare for segueSegue 为 segue 做准备的特定值
【发布时间】:2018-04-17 01:48:50
【问题描述】:

现在我有 2 个按钮将文本字段数据从 vc1 分隔到 vc2。我想让顶部按钮将文本字段中的任何内容转到 vc2。我希望底部的按钮可以转到下一个 vc。现在,两个按钮都将数据从文本字段传递到下一个 vc。

    import UIKit
class ViewController: UIViewController {
@IBOutlet var textfield: UITextField!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard let c2 = segue.destination as? twoViewController else {return}
    c2.ss = textfield.text
}}

class twoViewController: UIViewController {
var ss: String!
@IBOutlet var datalbl: UILabel!
override func viewDidLoad() {
    super.viewDidLoad()
    datalbl.text = ss
}}

【问题讨论】:

  • 顺便说一句,class 在 Swift 中的约定名称应以大写字母开头:TwoViewController。请注意,上面突出显示的语法并没有使您的类名变成蓝色。

标签: ios swift tags segue viewcontroller


【解决方案1】:

有两种方法可以解决这个问题:

使用发送者并设置按钮的标签值

prepare(for:sender:) 中的 sender 是被按下的按钮,因此您可以为 2 个按钮设置唯一的标记值,然后检查:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard let c2 = segue.destination as? twoViewController else {return}
    if (sender as? UIButton)?.tag == 1 {
        c2.ss = textfield.text
    }
}

为segues设置标识符并在prepare(for:sender:)中检查它们

由于您有两个转场,请单击情节提要中的转场箭头并在 属性检查器中设置它们的标识符。您可以将顶部按钮的 segue 标识符设置为 "sendTextField",然后在 prepare(for:sender:) 中检查:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    guard let c2 = segue.destination as? twoViewController else {return}
    if segue.identifier == "sendTextfield" {
        c2.ss = textfield.text
    }
}

【讨论】:

    猜你喜欢
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 2017-06-15
    • 2015-10-21
    相关资源
    最近更新 更多