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 做准备的特定值的主要内容,如果未能解决你的问题,请参考以下文章
使用 Sender 为 Swift 中的 Segue 做准备
在 Swift 中为嵌入式 tableView 中的 segue 做准备