【问题标题】:Segue textfields to a string array将文本字段转为字符串数组
【发布时间】:2016-07-19 14:22:02
【问题描述】:

我正在使用 swift 做一个应用程序,它获取 6 个文本字段中的条目并通过 segue 将它们传递到第二个视图控制器上的空字符串数组中。我怎么做?

这是我的代码,是基础知识,但我不确定如何发送信息。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    let destination = segue.destinationViewController as! secondView

    if segue.identifier == segueID {

        destination.stringArray = ?

    }

}

我的第二个视图控制器上的数组是这样的:

var stringArray = [String]()

【问题讨论】:

    标签: arrays swift segue


    【解决方案1】:

    最短路径:

    destination.stringArray = view.subviews.flatMap { ($0 as? UITextField)?.text }
    

    【讨论】:

    • 提问者不一定说要使用视图中的所有文本字段。这也不考虑视图层次结构中超过 1 级的文本字段(即包含在子视图中)。
    • 当然需要重写,以防有更多的层次结构。这是一个很好的观点 :) 我的答案是展示如何在所有文本字段都是一个根视图的子视图时快速实现它。
    • 事实上,这个工作就像一个魅力。抱歉,我的问题不是很具体。需要使用所有文本字段,否则将显示警报以防止发生转场。非常感谢这个。简单而直接。 :)
    • @VeronicaG 可能您已经知道这一点,但请注意,对于空文本字段,使用上述解决方案将不包含任何条目(因此对于所有文本字段为空的情况,stringArray 将为空数组)。
    • @dfri 没关系,我使用了 UIAlert 来防止用户将文本字段留空。
    【解决方案2】:

    您的 6 个文本字段是在 IBOutletCollection(换句话说,一个文本字段数组)中还是它们各自是自己的 IBOutlet(文本字段)?无论哪种方式,您的问题都归结为将它们的所有文本值放入一个数组中,如果它们位于 IBOutletCollection 中,则可以这样做:

    destination.stringArray = myTextFieldCollection.flatMap { $0.text }
    

    或者,如果它们不在数组中:

    destination.stringArray = [myTextField1, myTextField2, ...,
        myTextField6].flatMap { $0.text }
    

    我在这些中使用flatMap,因为UITextField.text 是可选的String?,因此需要将它们解包到StringflatMap 可以安全地这样做。

    【讨论】:

    • 请注意,后者将不起作用,因为目标中的stringArray 不允许可选的String 条目。
    • 很好,已修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多