【问题标题】:Easy way to disable a UITextField?禁用 UITextField 的简单方法?
【发布时间】:2010-10-10 15:04:06
【问题描述】:

有没有一种简单的方法可以在代码中禁用UITextField

我的应用有 12 个UITextField,默认情况下全部打开,但是当在我的 Segment Control 中检测到更改时,我想根据用户选择的 Segment 禁用一些 UITextField

只需要知道如何禁用它或使其不可编辑?

谢谢

【问题讨论】:

    标签: iphone ios uitextfield


    【解决方案1】:

    在 Objective-C 中:

    textField.enabled = NO;
    

    在 Swift 中:

    textField.isEnabled = false
    

    参考:UIControl.isEnabled

    【讨论】:

    • 大声笑,我确定我已经准备好了,但我一定是打错字了,因为它有效..你的救命稻草...谢谢:)
    • 如果您想知道 if 是否启用,请记住 getter 是 textField.isEnabled,而不是 textField.enabled。
    • 属性enabled继承了UIControl的属性。如果否,则忽略触摸事件。这是一种很好的解决方法。
    【解决方案2】:

    如果您还想指示文本字段被禁用,您应该添加更多代码:

    如果使用 UITextBorderStyleRoundedRect,则只能将文本变灰:

    textField.enabled = NO;
    textField.textColor = [UIColor lightGrayColor];
    

    如果使用任何其他样式,您也可以将背景变灰:

    textField.enabled = NO;
    textField.backgroundColor = [UIColor lightGrayColor];
    

    【讨论】:

      【解决方案3】:

      这将是最简单的,当您也有多个文本字段时:

      在 viewDidLoad 中:(仅为不可编辑的文本字段设置委托。

      self.textfield.delegate=self;
      

      并插入这个委托函数:

      - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
      return NO;
      }
      

      就是这样!

      【讨论】:

      • 这比已经发过的textField.enabled = NO简单多了?我没有 -1 这个,因为它是一个合法的替代解决方案,在一些边缘情况下可能更方便(例如,如果你有一些对象是不同文本字段的负载的代表,并且哪些对象被禁用是经常更改),但对于大多数情况,它绝对不会比公认的答案更简单。
      • 你总是可以这样检查:'code' if(textfield==self.aTextField){ //检查那是不是你想禁用的文本字段 return NO;其他{
      • 当您有多个文本字段时,这是最好的解决方案!谢谢你安基什
      • 如果您不希望 UITextField 变灰,这也是可行的方法。
      【解决方案4】:

      在 UIView 上创建类别。

      在该类别中添加以下方法。

      -(void)disable {
          self.alpha = 0.5;
          self.userInteractionEnabled = FALSE;
      }
      
      -(void)enable {
          self.alpha = 1.0;
          self.userInteractionEnabled = TRUE;
      }
      

      然后打电话

      yourTextField.disable();
      

      实际上,您可以在任何您想要的视图上使用它。

      【讨论】:

        【解决方案5】:

        你应该符合UITextFieldDelegate并在这个方法中返回false。这样文本字段仍然可以选择,但不可编辑和剪切

        代码在 Swift 4 中

        func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
          return false
        }
        

        【讨论】:

        • 实际上,它仍然适用于所有内容。键盘将打开并接受按键,您将获得粘贴操作,但文本字段将全部忽略。从用户的角度来看,这是一个糟糕的解决方案。
        • 有时如果您希望文本字段打开 UIPickerView,这将是一个可行的解决方案
        猜你喜欢
        • 1970-01-01
        • 2012-03-11
        • 2016-11-14
        • 1970-01-01
        • 2014-05-04
        • 2013-03-09
        • 2012-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多