Đã sắp xếp! Tôi chỉ cần sử dụng một cái nhìn văn bản 1x1px và sử dụng phương pháp đại biểu textViewDidChangeSelection:
EDIT: Đối với iOS 6 Tôi đã phải thay đổi quan điểm văn bản để 50x50px (hoặc ít nhất là đủ để thực sự hiển thị văn bản) để làm việc này
Tôi cũng đã quản lý để tắt bàn phím ảo khi bàn đạp bị ngắt kết nối.
Đây là mã của tôi trong viewDidLoad:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillAppear:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillDisappear:) name:UIKeyboardWillHideNotification object:nil];
UITextView *hiddenTextView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
[hiddenTextView setHidden:YES];
hiddenTextView.text = @"aa";
hiddenTextView.delegate = self;
hiddenTextView.selectedRange = NSMakeRange(1, 0);
[self.view addSubview:hiddenTextView];
[hiddenTextView becomeFirstResponder];
if (keyboardShown)
[hiddenTextView resignFirstResponder];
keyboardShown
được khai báo là một bool
trong tập tin tiêu đề của tôi.
Sau đó, thêm các phương pháp:
- (void)textViewDidChangeSelection:(UITextView *)textView {
/******TEXT FIELD CARET CHANGED******/
if (textView.selectedRange.location == 2) {
// End of text - down arrow pressed
textView.selectedRange = NSMakeRange(1, 0);
} else if (textView.selectedRange.location == 0) {
// Beginning of text - up arrow pressed
textView.selectedRange = NSMakeRange(1, 0);
}
// Check if text has changed and replace with original
if (![textView.text isEqualToString:@"aa"])
textView.text = @"aa";
}
- (void)keyboardWillAppear:(NSNotification *)aNotification {
keyboardShown = YES;
}
- (void)keyboardWillDisappear:(NSNotification *)aNotification {
keyboardShown = NO;
}
Tôi hy vọng mã này giúp ai đó đang tìm kiếm một giải pháp cho vấn đề này. Hãy sử dụng nó.
Nó có hoạt động với 'UIWebView' không? – Dmitry
@Altaveron thuộc tính keyCommands là thuộc tính trên UIResponder và UIWebView kế thừa từ UIResponder nên tôi không thể thấy lý do tại sao nó không hoạt động. – amergin
'UIWebView' là vùng chứa cho nhiều bản xem trước. – Dmitry