【问题标题】:Disable blinking cursor in UITextField?禁用 UITextField 中的闪烁光标?
【发布时间】:2011-10-30 16:27:55
【问题描述】:

我已按照说明 here 并成功设置了一个使用 UIDatePicker 进行更新的 UITextField。但是 UITextField 中的光标在闪烁,这对我来说似乎有点尴尬。

有什么办法可以去掉那个光标吗?

【问题讨论】:

    标签: uitextfield uidatepicker text-cursor


    【解决方案1】:

    我意识到这是一个老问题,但是随着 iOS 7 的更新,现在可以通过执行以下操作来隐藏光标:

    [[self textFieldName] setTintColor:[UIColor clearColor]];

    不过,它只能在 iOS 7+ 上运行。

    【讨论】:

      【解决方案2】:

      继承 UITextfield 并覆盖 - (CGRect)caretRectForPosition:(UITextPosition *)position 方法并返回 CGRectZero

      - (CGRect)caretRectForPosition:(UITextPosition *)position {
          return CGRectZero;
      }
      

      【讨论】:

      • 它不适用于 iOS 4.3。 UITextInput 协议仅适用于 iOS 5 及更高版本。
      • 这应该是选择的答案。重点是解决我们想要隐藏的特定部分——即插入符号。这是所有这些中最好的解决方案。谢谢。
      【解决方案3】:

      希望对你有帮助。

      设置光标 UIColor -> 空。

       [[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor clearColor] forKey:@"insertionPointColor"];
      

      在 Swift 中:2.3

      self.textField.valueForKey("textInputTraits")?.setValue(UIColor.clearColor() , forKey:"insertionPointColor")
      

      【讨论】:

      • 有人知道swift版吗?
      • 正确的答案不应该是使用私有 API 值。
      【解决方案4】:

      我无法让 jcm 的解决方案发挥作用。我最终做的是继承 UILabel 以模仿 UITextField 的交互功能,而没有我不想要的部分(如光标)。我在这里写了一篇关于它的博客文章:

      http://pietrorea.com/2012/07/how-to-hide-the-cursor-in-a-uitextfield/

      基本上,UILabel 子类需要覆盖 isUserInteractionEnabled、inputView、inputViewAccessory 和 canBecomeFirstResponder。只是几行代码,更有意义。

      【讨论】:

      • 我最近在我的项目中添加了您的 PRLabel 类。但我不知道我做错了什么,它严重弄乱了 tableview 索引...我认为当显示选择器视图时, tableview 滚动但视觉上没有更新......我在第 1 节中有一个 PRLabel ..我触摸它,选择器视图显示然后当我触摸第 0 节中的一个单元格时,它被解释为第 1 节..
      【解决方案5】:

      完全愚蠢的 hack,但是如果您在 Interface Builder 属性检查器的 UIView 部分中设置文本字段的色调颜色以匹配背景颜色,则光标将显示为不可见:

      【讨论】:

        【解决方案6】:

        我所做的是将另一个 UITextField 覆盖在我想隐藏其光标的那个之上。然后在委托方法 textFieldShouldBeginEditing 中,我将另一个 textField 设置为第一响应者并返回 NO。

        -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
            if (textField.tag==TAG_OF_DUMMY_TEXTFIELD) {
                [otherField becomeFirstResponder];
                return NO;
            }
            return YES;
        }
        

        然后在日期选择器调用的方法中:

        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@YOUR_DATE_FORMAT];
        dummyField.text = [dateFormatter stringFromDate:datePicker.date];
        

        在 Interface Builder 中 otherField(带有 datePicker 输入视图的那个)在 dummyField(隐藏光标的那个)后面。

        【讨论】:

          【解决方案7】:

          不是最佳解决方案,但您也可以将色调颜色的不透明度设置为 0%。

          【讨论】:

            【解决方案8】:

            我发现这个解决方案是最容易实施的。

            确保在 .h 文件中定义 UITextFieldDelegate:

            .... UIViewController <UITextFieldDelegate>
            

            在您的 .m 文件中,将此添加到您为日期选择器调用的方法中:

            [yourTextField resignFirstResponder];
            

            这将防止文本字段闪烁。

            【讨论】:

              【解决方案9】:

              Balaji 的方法确实有效。

              我也多次使用过这样的KVC方案。 尽管它似乎没有记录,但它确实有效。坦率地说,你不使用任何 这里的私有方法——只有合法的键值编码。

              它与 [addNewCategoryTextField textInputTraits] 截然不同。

              附:昨天我的新应用出现在 AppStore 上,这种方法没有任何问题。当我使用 KVC 更改一些只读属性(如 navigatonBar)或私有 ivars 时,这不是第一种情况。

              【讨论】:

                【解决方案10】:

                您可以通过关联对象将BOOL cursorless 属性添加到类别中的UITextField

                @interface UITextField (Cursorless)
                
                @property (nonatomic, assign) BOOL cursorless;
                
                @end
                

                然后使用方法调配来调配caretRectForPosition:,并使用在CGRectZero 和使用cursorless 的默认值之间切换的方法。

                这通过一个插入类别导致一个简单的界面。这在以下文件中得到了证明。

                只需将它们放入并获得这个简单界面的好处

                UITextField 类别: https://github.com/rexmas/RexDK/blob/master/RexDK/UI/UITextField%2BRXCursorless.h https://github.com/rexmas/RexDK/blob/master/RexDK/UI/UITextField%2BRXCursorless.m

                方法混搭: https://github.com/rexmas/RexDK/blob/master/RexDK/Foundation/NSObject%2BRXRuntimeAdditions.h https://github.com/rexmas/RexDK/blob/master/RexDK/Foundation/NSObject%2BRXRuntimeAdditions.m

                【讨论】:

                  猜你喜欢
                  • 2017-01-23
                  • 2011-07-31
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-12-07
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多