【问题标题】:How to know when UITextView became first responder如何知道 UITextView 何时成为第一响应者
【发布时间】:2011-08-11 07:17:29
【问题描述】:

当 uitextview 成为第一响应者时如何处理。我在文本视图中有文本,我想在视图变为活动状态时清除文本。我怎样才能做到这一点?提前致谢

【问题讨论】:

    标签: ios ios4 uitextview


    【解决方案1】:

    你绝对可以使用UITextViewDelegate的方法:

    - (BOOL)textViewShouldBeginEditing:(UITextView *)textView
    

    只需返回 YES 并在该方法内拦截。您也可以使用UITextFieldDelegateUITextFields 执行此操作,并且:

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
    

    希望对您有所帮助。

    【讨论】:

    • 如果 TextView 的 isEditable 属性已设置为 false 则不起作用
    • @SepehrBehroozi 如果一开始就不能编辑,为什么Textview会成为第一响应者?
    【解决方案2】:

    textViewShouldBeginEditing 实际上在文本视图成为第一响应者之前触发。

    textViewDidBeginEditing 将在文本视图成为第一响应者时触发,并且是执行需要知道活动文本视图是什么的代码的最佳位置。

    如果您并不真正担心哪个字段处于活动状态,并且只想在点击该字段后清除文本,您可以使用任一功能。

    编辑:相同的方法可用于文本字段。

    【讨论】:

      【解决方案3】:

      Swift 4 解决方案

      func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {           
              return true
       }
      

      【讨论】:

      • 你的意思是textViewDidBeginEditing
      【解决方案4】:

      以前的答案对 UITextBox 来说非常有用,但是如果您有一个从 NSResponder 派生的自定义类并且需要知道它何时成为第一响应者:

      -(BOOL) becomeFirstResponder
      {
          // Your stuff here
          return YES;
      }
      

      【讨论】:

        【解决方案5】:

        如上所述,您可以覆盖 becomeFirstResponder,但请注意您必须调用超类实现。如果您不这样做,则在文本字段上弹出键盘之类的操作将不起作用。即

        override func becomeFirstResponder() -> Bool {
          if super.becomeFirstResponder() {
            // set up the control state
            return true
          }
        
          return false
        }
        

        【讨论】:

          猜你喜欢
          • 2023-03-24
          • 1970-01-01
          • 2012-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-29
          • 1970-01-01
          • 2014-02-08
          相关资源
          最近更新 更多