ios 未调用UITextFieldDelegate方法

ax6ht2ek  于 2023-02-10  发布在  iOS
关注(0)|答案(7)|浏览(136)

我下面的大书呆子牧场iOS编程书(斯威夫特版本),我有这个文件.

import UIKit

class ConversionViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet var celsiusLabel: UILabel!
    @IBOutlet var textField: UITextField!

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
        print("here")
        return true
    }

    //rest of the code here
}

由于某种原因,textField委托方法没有被调用。我在控制台中看不到“here”日志。我已经反复检查了很多次命名和语法。有什么想法吗?

ntjbwcob

ntjbwcob1#

您需要将文本字段的委托设置为自己。

override func viewDidLoad() {
     super.viewDidLoad()
     textField.delegate = self
}
x759pob2

x759pob22#

这条线存在吗?

textField.delegate = self
agxfikkp

agxfikkp3#

我在函数中缺少一个_,在第一个括号之后:
工作:

func textFieldDidBeginEditing(textField: UITextField) {
}

此方法有效

func textFieldDidBeginEditing(_textField: UITextField) {
}
sc4hvdpw

sc4hvdpw4#

你必须遵循这些步骤--
1-将delegate与类名放在一起。

class YourViewController: UIViewController,UITextFieldDelegate

2-在viewDidLoad方法中指定delegate

textField.delegate = self

3-加上delegate方法--

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool
{
    // return NO to disallow editing.
    return true
}

func textFieldDidBeginEditing(_ textField: UITextField)
{
    // became first responder
}

func textFieldShouldEndEditing(_ textField: UITextField) -> Bool
{
    // return YES to allow editing to stop and to resign first responder status. NO to disallow the editing session to end
    return true
}

func textFieldDidEndEditing(_ textField: UITextField)
{
    // may be called if forced even if shouldEndEditing returns NO (e.g. view removed from window) or endEditing:YES called
}

func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason)
{
    // if implemented, called in place of textFieldDidEndEditing:
}

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{
    // return NO to not change text
    return true
}

func textFieldShouldClear(_ textField: UITextField) -> Bool
{
    // called when clear button pressed. return NO to ignore (no notifications)
    return true
}
1sbrub3j

1sbrub3j5#

对于此功能:
函数文本字段ID开始编辑(_文本字段:UIText字段){ }
确保你不标记它为私人的. e.g.不要到这:
私有函数文本字段ID开始编辑(_文本字段:UIText字段){ }
如果标记为private,就不会调用它。

xqkwcwgp

xqkwcwgp6#

如果在将一个控制器作为子控制器添加到父控制器之前将其嵌入到另一个控制器中,则textfield委托方法可能根本不起作用

ktecyv1j

ktecyv1j7#

当你确定你的代码都是正确的时候,我会添加一个没有人提到的东西,ViewControllerviewDidLoad中写入variable.delegate = selfUIViewlayoutSubviews中写入variable.delegate = self。解决这个问题浪费了我太多的时间。

相关问题