3

我希望在点击文本字段时突出显示文本字段内的文本。

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

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

4

5 回答 5

6

这可以通过

(void)textFieldDidBeginEditing:(UITextField *)iTextField {
    [iTextField selectAll:self];
}
于 2011-02-15T19:11:59.000 回答
1

你需要自己做亮点。你可以试试:

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

有很多选择...

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

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    textField.text = nil;
}
于 2011-02-13T19:04:06.533 回答
1

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

于 2014-03-21T11:05:38.267 回答
1

如果全选:并不总是有效,这里有一个修复:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [textField performSelector:@selector(selectAll:) withObject:textField afterDelay:0.f];
}
于 2014-03-25T18:08:35.410 回答
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
于 2016-02-11T12:39:04.147 回答