【问题标题】:highlighting the text inside the textfield突出显示文本字段内的文本
【发布时间】:2011-06-26 13:11:56
【问题描述】:

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

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

知道如何实现吗?

【问题讨论】:

    标签: iphone cocoa-touch ios uitextfield uitextviewdelegate


    【解决方案1】:

    如果您仍然希望能够在 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
    

    【讨论】:

      【解决方案2】:

      如果全选:并不总是有效,这里有一个解决方法:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 请注意,必须在[super becomeFirstResponder]之后执行此操作
        • 这在大多数情况下都有效。它只是在文本字段获得焦点时每隔一次选择文本。
        【解决方案4】:

        这可以通过

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

        【讨论】:

          【解决方案5】:

          您需要自己进行突出显示。你可以试试:

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

          有很多选择...

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

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

          【讨论】:

          • 我希望在有人点击数字键盘时删除原始文本。我尝试使用 clearButtonMode 但由于我的文本字段大小非常小,十字图标完全占据了文本字段。
          • 谢谢。但是我不想在处于编辑模式时清除文本字段。为此,有一个简单的属性“clearsOnBeginEditing”。我希望突出显示我的文本,以便如果有人点击数字键盘中的任何数字,它会做两件事:1)删除突出显示的文本和 2)放置新文本。但是,如果有人想不采取任何行动并摆脱数字键盘,他仍然可以保留旧值。
          猜你喜欢
          • 1970-01-01
          • 2010-09-13
          • 1970-01-01
          • 2013-05-28
          • 1970-01-01
          • 2016-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多