【发布时间】:2011-06-26 13:11:56
【问题描述】:
我希望文本字段内的文本在我点击时突出显示。
我希望在有人点击数字键盘时删除原始文本。我尝试使用 clearButtonMode 但由于我的文本字段大小非常小,十字图标完全占据了文本字段。
知道如何实现吗?
【问题讨论】:
标签: iphone cocoa-touch ios uitextfield uitextviewdelegate
我希望文本字段内的文本在我点击时突出显示。
我希望在有人点击数字键盘时删除原始文本。我尝试使用 clearButtonMode 但由于我的文本字段大小非常小,十字图标完全占据了文本字段。
知道如何实现吗?
【问题讨论】:
标签: iphone cocoa-touch ios uitextfield uitextviewdelegate
如果您仍然希望能够在 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
【讨论】:
如果全选:并不总是有效,这里有一个解决方法:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[textField performSelector:@selector(selectAll:) withObject:textField afterDelay:0.f];
}
【讨论】:
点击文本字段时突出显示文本的最简单方法是继承 UITextField,覆盖 becomeFirstResponder 并选择其中的所有文本。
【讨论】:
这可以通过
来实现(void)textFieldDidBeginEditing:(UITextField *)iTextField {
[iTextField selectAll:self];
}
【讨论】:
您需要自己进行突出显示。你可以试试:
有很多选择...
编辑:针对您的问题,为了在文本字段中开始编辑时清除先前值的字段,您将对象设置为符合 UITextFieldDelegate 协议,并实现此方法:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
textField.text = nil;
}
【讨论】: