【问题标题】:Set a textfield and then edit it设置一个文本字段,然后编辑它
【发布时间】:2017-01-30 15:43:29
【问题描述】:

如何设置文本字段的值然后对其进行编辑? 使用 firebase,我为包含名称的用户帐户创建了一个字典。对于第一个文本字段,文本字段文本等于用户名。当用户开始使用该文本字段编辑名称时,另一个名为“用户名”的变量应该存储新的文本/值,但它没有。用户可以编辑文本字段本身,但“用户名”变量不存储编辑后的版本,仅存储在 firebase 中的原始版本(user.name)。下面是我的代码:

            var username: String?
            case 0:
                firstfewCells.ttField.text = user.name
                self.username = firstfewCells.ttField.text

我想要做的是使文本字段可编辑,以便按下保存按钮时文本字段中的任何内容都将被存储

【问题讨论】:

    标签: ios swift xcode variables uitextfield


    【解决方案1】:

    您已将username 的值设置为user.name,但该值很可能是一个副本,您不应期望“用户名”的更改会因文本字段的更改而导致。

    您可以通过多种方式来收听文本字段的更改,最简单的方法是通过uitextfielddelegate 方法textfielddidchange(我会留给您谷歌)。

    但是,我建议您这样做,如果您只是想提供一个类似表单的界面以允许用户更改将被发布到服务器的值,则只需在保存时获取文本字段的值或按下提交按钮 (let username = nameTextField.text)。这简化了您的代码,因为您将消除不需要的状态以及保持同步所带来的所有复杂性。

    【讨论】:

    • 当文本字段被放置在一个表格视图中并且我通过它们的索引路径访问 cellForRowAt 的每个文本字段时,我该怎么做?
    • @Vandal 好的,所以这有点复杂,有几种方法可以做到这一点。您可以在视图控制器中创建文本字段并保留对它们的引用并将它们添加(并删除它们)到“cellforindexpath”实现中的相应单元格(内容视图)。或者按照我上面说的做 - 使用 textfielddelegate 协议来监听更改并更新单独的字符串。您可能会使用“tableview indexpathForCell”来确定应该更新哪个字符串。
    【解决方案2】:
           var name : String? 
    
     override func awakeFromNib() {
               yourTextField.addTarget(self, action: #selector(self.doSomething(_:)), forControlEvents: UIControlEvents.EditingChanged)
           }
    
            func doSomething() {
               yourTextField.text
            }
    

    如果您想将此信息发送到您的 ViewController,您需要创建一个委托。如果你需要,你可以问。但是有很多教程解释了它是如何工作的。

    【讨论】:

    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多