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