Segue 为 segue 做准备的特定值

Posted

技术标签:

【中文标题】Segue 为 segue 做准备的特定值【英文标题】:Segue specific value in prepare for 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

【问题讨论】:

Passing Data between View Controllers的可能重复 顺便说一句,class 在 Swift 中的约定名称应以大写字母开头:TwoViewController。请注意,上面突出显示的语法并没有使您的类名变成蓝色。 【参考方案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
    

【讨论】:

以上是关于Segue 为 segue 做准备的特定值的主要内容,如果未能解决你的问题,请参考以下文章

为 segue 做准备没有按预期工作

使用 Sender 为 Swift 中的 Segue 做准备

为 segue 做准备,传递数据

在 Swift 中为嵌入式 tableView 中的 segue 做准备

准备 Segue 到 UITabBarController 选项卡

准备(为 segue :) 没有被调用