如何从 StackView 内的 UITextfield 获取文本

Posted

技术标签:

【中文标题】如何从 StackView 内的 UITextfield 获取文本【英文标题】:How to get the text from a UITextfield inside a StackView 【发布时间】:2018-10-23 18:25:14 【问题描述】:

我正在尝试从我在 stackview 中创建的文本字段中获取文本,但我无法做到。我想知道是否有人可以帮助我。

例如,我想要做的是: 当我按下按钮时 Label.text = myTextField.text.

这是我的代码:

var mySttackView: UIStackView = 
    //NAMETEXTFIELD
    let myTextField = UITextField() //<---- want to get the text from this when I press a button but I can't get access to it
    myTextField.translatesAutoresizingMaskIntoConstraints = false
    myTextField.placeholder = "MY TEXT"

    let theStackview: UIStackView = UIStackView(arrangedSubviews: [myTextField])
    theStackview.axis = .vertical
    theStackview.translatesAutoresizingMaskIntoConstraints = false
    theStackview.distribution = .fillEqually
    theStackview.spacing = 12
    return allTextFields
()

【问题讨论】:

您是否尝试过使用堆栈视图的arrangedSubviews 属性?展示你所做的尝试。 “我做不到”。当你尝试时会发生什么? 我的意思是当我尝试打字的时候。标签.text = myTextField.text。在 ViewDidLoad myTextField 的范围仅限于创建堆栈视图的闭包(因为它是在此处声明的)。要像这样访问它,您需要将它声明为类的实例变量。 如果你能告诉我你在代码中的意思,我将不胜感激,因为我是编程新手,英语不是我的第一语言:) 【参考方案1】:

如果您想访问myTextField,请在创建UIStackView 的闭包之外声明它。

如果myTextFieldmyStackView 是实例变量,则myStackView-creating 闭包不能引用myTextField,除非您还将myStackView 声明为lazy

let myTextField = UITextField()

lazy var myStackView: UIStackView = 
    myTextField.translatesAutoresizingMaskIntoConstraints = false
    myTextField.placeholder = "MY TEXT"

    let theStackview: UIStackView = UIStackView(arrangedSubviews: [myTextField])
    theStackview.axis = .vertical
    theStackview.translatesAutoresizingMaskIntoConstraints = false
    theStackview.distribution = .fillEqually
    theStackview.spacing = 12
    return theStackview
()

【讨论】:

感谢您的帮助!

以上是关于如何从 StackView 内的 UITextfield 获取文本的主要内容,如果未能解决你的问题,请参考以下文章

如何向 StackView 的子视图内的视图添加约束

在水平 StackView 内的 TextView 中删除 Padding top

UIView 内的 StackView - 自动高度

StackView 内的 Xcode 11 ScrollView

StackView 内的 CollectionView

collectionview 或 uitableview 内的 Stackview