突出显示文本域内的文本

时间:2011-02-13 19:00:49

标签: iphone cocoa-touch ios uitextfield uitextviewdelegate

我想点击文本字段内的文字时会突出显示。

我希望有人点击数字键盘时删除原始文本。我尝试使用clearButtonMode但是由于我的文本字段大小非常小,所以十字图标完全占据了文本字段。

知道如何实现这个目标吗?

5 个答案:

答案 0 :(得分:6)

这可以通过

来实现
(void)textFieldDidBeginEditing:(UITextField *)iTextField {
    [iTextField selectAll:self];
}

答案 1 :(得分:1)

你需要自己做突出显示。你可以尝试:

  • 更改文本字段的字体(更大,更大胆,不同颜色)
  • 在文本字段顶部覆盖透明的UIView。
  • 更改文本字段的背景
  • 更改边框样式

有很多选择......

编辑:为了回答您的问题,为了在文本字段中开始编辑时清除前一个值的字段,您需要将对象设置为符合UITextFieldDelegate协议,并实现此方法:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    textField.text = nil;
}

答案 2 :(得分:1)

在点击文本字段时突出显示文本的最简单方法是简单地将UITextField子类化,覆盖becomeFirstResponder并选择其中的所有文本。

答案 3 :(得分:0)

如果选择全部:并不总是在这里修复:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [textField performSelector:@selector(selectAll:) withObject:textField afterDelay:0.f];
}

答案 4 :(得分:0)

如果您仍希望能够在ViewController中使用其他委托功能,我建议您添加:

override weak var delegate: UITextFieldDelegate? {
    didSet {
        if delegate?.isKindOfClass(YourTextField) == false {
            // Checks so YourTextField (self) doesn't set the textFieldDelegate when assigning self.delegate = self 
            textFieldDelegate = delegate
            delegate = self
        }
    }
}

// This delegate will actually be your public delegate to the view controller which will be called in your overwritten functions
private weak var textFieldDelegate: UITextFieldDelegate?

class YourTextField: UITextField, UITextFieldDelegate {

    init(){
        super.init(frame: CGRectZero)
        self.delegate = self
    }

    func textFieldDidBeginEditing(textField: UITextField) {
        textField.performSelector(Selector("selectAll:"), withObject: textField)
        textFieldDelegate?.textFieldDidBeginEditing?(textField)
    }
}

这样你的视图控制器就不需要知道你已经覆盖了委托,你可以在视图控制器中实现UITextFieldDelegate函数。

let yourTextField = YourTextField()
yourTextField.delegate = self