gpt4 book ai didi

ios - 为什么我的标签在从 UITextField 更新 UILabel 时留下了 1 个字符?

转载 作者:行者123 更新时间:2023-11-28 06:00:45 25 4
gpt4 key购买 nike

所以我正在从 UiTextfield(用户输入)进行 UILabel 实时更新。我正在使用此线程中的代码 Swift3: Live UiLabel update on user input

但不知何故,当我完全删除 UITextField 中的文本时,我的 UILabel 总是留下一个字符。喜欢这里的 .gif http://g.recordit.co/SPQWnYtHJg.gif

而且好像总是少了一个字符,如下图

enter image description here

enter image description here

这是我使用的代码

import UIKit

class CreateEventVC: UIViewController {

@IBOutlet weak var eventNameTextField: UITextField!
@IBOutlet weak var eventNameLabel: UILabel!

override func viewDidLoad() {
super.viewDidLoad()

//initial value
eventNameLabel.text = " "

// delegate declaration
eventNameTextField.delegate = self
}

}


extension CreateEventVC : UITextFieldDelegate {

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
eventNameLabel.text = eventNameTextField.text
return true
}
}

我最初怀疑是因为我在 viewDidload 中添加了这一行

eventNameLabel.text = " "

但是如果我删除这个,问题仍然存在

我该怎么办?

最佳答案

textField:shouldChangeCharactersIn:range:replacementString 在更改应用于文本字段之前被调用,这允许您的应用否决请求并过滤掉不需要的内容。

问题是,您依赖于文本字段的文本。相反,您需要根据传递给委托(delegate)的信息构建结果值并应用该值

也许更像是……

extension CreateEventVC: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let text = textField.text ?? ""
eventNameLabel.text = (text as NSString).replacingCharacters(in: range, with: string)
return true;
}
}

关于ios - 为什么我的标签在从 UITextField 更新 UILabel 时留下了 1 个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49837227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com