禁用UITextField中的闪烁光标?

时间:2011-08-19 14:29:30

标签: cursor uitextfield uidatepicker

我已按照说明here成功设置了一个使用UIDatePicker更新的UITextField。但是UITextField中的光标闪烁,这对我来说似乎有点尴尬。有没有解决方法摆脱那个光标?

10 个答案:

答案 0 :(得分:44)

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

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

但它只适用于iOS 7+。

答案 1 :(得分:39)

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

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

答案 2 :(得分:32)

我希望它对你有所帮助。

设置光标UIColor - >空。

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

在Swift:2.3

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

答案 3 :(得分:6)

我无法获得jcm的解决方案。我最终做的是将UILabel子类化为模仿UITextField的交互功能而没有我不想要的部分(如光标)。我在这里写了一篇关于它的博客文章:

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

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

答案 4 :(得分:2)

完全愚蠢的黑客攻击,但如果您在Interface Builder属性检查器的for (int item = 0; item < Customer.Orders.Count; item++) { CalculateTax(Customer.State, Customer.Zip, Customer.Orders[item]); } 部分设置文本字段的色调以匹配背景颜色,则光标将显示为不可见:

答案 5 :(得分:1)

我所做的是将另一个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(隐藏光标的那个)之后。

答案 6 :(得分:1)

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

enter image description here

答案 7 :(得分:0)

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

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

.... UIViewController <UITextFieldDelegate>

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

[yourTextField resignFirstResponder];

这样可以防止文本字段闪烁。

答案 8 :(得分:0)

Balaji的方法确实有效。

我也多次使用过这样的KVC解决方案。 尽管它似乎没有文档,但它的工作原理。坦率地说,你不能使用任何东西 这里的私有方法 - 只有合法的键值编码。

与[addNewCategoryTextField textInputTraits]截然不同。

P.S。昨天我的新应用程序出现在AppStore,没有遇到任何问题。当我使用KVC更改一些只读属性(如navigatonBar)或私有ivars时,这不是第一种情况。

答案 9 :(得分:-1)

您可以通过相关对象在类别中向BOOL cursorless添加UITextField属性。

@interface UITextField (Cursorless)

@property (nonatomic, assign) BOOL cursorless;

@end

然后使用方法调整来调用caretRectForPosition:,方法是使用CGRectZerocursorless及其默认值之间切换。

这通过插入类别导致简单的界面。这在以下文件中进行了演示。

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

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