我如何阻止编辑UITextField
中的文本以及隐藏光标/插入符/放大镜,但仍然显示键盘,因为我使用inputView
{{1} }} / UIPickerView
?
将UIDatePickerView
设置为userInteractionEnabled
不起作用,因为它不再接收任何触摸并且不会显示键盘。
答案 0 :(得分:17)
子类UITextField
//Disables caret
- (CGRect)caretRectForPosition:(UITextPosition *)position
{
return CGRectZero;
}
//Disables magnifying glass
-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
{
if ([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]])
{
gestureRecognizer.enabled = NO;
}
[super addGestureRecognizer:gestureRecognizer];
}
在您的UITextFieldDelegate
中//Prevent text from being copied and pasted or edited with bluetooth keyboard.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
return NO;
}
现在只需从UIPickerView / UIDatePicker的结果中以编程方式设置文本。
答案 1 :(得分:15)
在iOS 7中隐藏光标要简单得多。仍然需要一些技巧来禁用放大镜
textField.tintColor = [UIColor clearColor];
答案 2 :(得分:5)
我希望这对你有所帮助。
设置光标UIColor - >空。在UI中,它将被隐藏。
[[self.textField valueForKey:@"textInputTraits"] setValue:[UIColor clearColor] forKey:@"insertionPointColor"];
答案 3 :(得分:2)
我发现最好的解决方案是
- (CGRect) caretRectForPosition:(UITextPosition*) position
{
return CGRectZero;
}
- (NSArray *)selectionRectsForRange:(UITextRange *)range
{
return nil;
}
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if (action == @selector(copy:) || action == @selector(selectAll:) || action == @selector(paste:))
{
returnNO;
}
return [super canPerformAction:action withSender:sender];
}
http://b2cloud.com.au/tutorial/disabling-the-caret-and-text-entry-in-uitextfields/
答案 4 :(得分:1)
要让UITextField
没有互动,但仍然使用inputView
:
使用以下方法对UITextField进行子类化:
// Hide the cursor
- (CGRect)caretRectForPosition:(UITextPosition*)position
{
return CGRectZero;
}
// All touches inside will be ignored
// and intercepted by the superview
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
return NO;
}
最后一种方法将单手防止任何编辑和放大镜玻璃,因为您将无法点按UITextField
。
例如,如果您在UITableViewCell
中使用文本字段,然后可以通过tableView:didSelectRowAtIndexPath:
切换firstResponder状态,则效果很好。
答案 5 :(得分:0)
要禁用与textfield的任何交互,除非使其成为第一响应者,您只需在文本字段上放置相同大小的UIButton即可。按钮点击事件的代码可能是这样的:
- (IBAction)btnEditPhoneTapped:(id)sender
{
if (self.tfClientPhoneNo.isFirstResponder == NO) [self.tfClientPhoneNo becomeFirstResponder];
}