Tôi đang cố triển khai một chương trình trong Xcode, phần nào giống như một dòng lệnh. Về cơ bản tôi có một UITextView có thể lấy nhiều dòng văn bản. Ngay bây giờ, tôi có một nút sẽ thực hiện các thay đổi cần thiết sau khi người dùng nhập lệnh, nhưng tôi muốn có thể có phương thức được gọi sau khi người dùng nhấn phím trả về trong UITextView, về cơ bản nó thay đổi sau mỗi lệnh. có khả năng làm cái này không?Muốn làm cho phản ứng UITextView trả về khóa
Trả lời
Nếu bạn đặt một đại biểu đến UITextView mà thực hiện
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
Sau đó, bạn có thể kiểm tra nếu ký tự cuối cùng là "\ n" và nhận văn bản được nhập từ lệnh cuối cùng bằng cách thực hiện
NSArray* components = [textView.text componentsSeparatedByString:@"\n"];
if ([components count] > 0) {
NSString* commandText = [components lastObject];
// and optionally clear the text view and hide the keyboard...
textView.text = @"";
[textView resignFirstResponder];
}
Cảm ơn tất cả các câu trả lời, các bạn. Tôi nghĩ rằng tôi sẽ gắn bó với điều này, mặc dù. – RaysonK
Điều này không cập nhật cho đến khi sau khi một phím khác được nhấn sau khi phím quay lại đã được nhấn. (Nhớ chức năng của bạn là shouldChangeInRange không didChangeInRange. –
Bạn có thể thực hiện việc này bằng cách thiết lập đại biểu cho số UITextView
. Xem UITextViewDelegate Protocol Reference để biết chi tiết về những gì có thể được thực hiện.
Lưu ý, tôi đã không kiểm tra này, chỉ cần một ý tưởng:
- (void)textViewDidChange:(UITextView *)textView
{
if ([[textView.text substringWithRange:NSMakeRange(textView.text.length - 1, 1)] isEqualToString:@"\n"])
{
[textView resignFirstResponder];
[self methodYouWantToCall];
}
}
Bất kỳ phản hồi nào @downvoter? –
Phương thức BOOL được đề cập ở trên là một câu trả lời sai ... cho một người đang kiểm tra văn bản từ TextView thời điểm trước khi nó được cập nhật để họ xem văn bản cũ ... Ngoài ra các phương pháp đã lỗi thời. sử dụng này sẽ làm việc ngay khi phím Enter được nhấn (The "câu trả lời" hiện tại sẽ không hoạt động cho đến khi phím Enter đã được ép và sau đó KHÁC phím được nhấn):
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if ([text isEqualToString:@"\n"]) {
NSLog(@"Return pressed");
} else {
NSLog(@"Other pressed");
}
return YES;
}
Đừng quên thêm số UITextViewDelegate
vào các giao thức của tệp .h.
@interface ViewController : UIViewController <UITextViewDelegate> {
và đặt yourTextView.delegate = self;
trong tệp .m!
/*
note: This will also get called if a user copy-pastes just a line-break...
unlikely but possible. If you need to ignore pasted line-breaks for some
reason see here: http://stackoverflow.com/a/15933860/2057171 ...
Now for an unrelated-tip: If you want to accept pasted line breaks however
I suggest you add an "or" to the conditional statement and make it also
check if "text" isEqualToString @"\r" which is another form of line-break
not found on the iOS keyboard but it can, however, be found on a website
and copy-pasted into your textView. If you want to accept pasted text
with a line-break at the end you will need to change the
"isEqualToString" code above to say "hasSuffix", this will check for
any string %@ with a "\n" at the end. (and again for "\r") but make
sure you don't call your "next" method until after `return YES;`
has been called and the text view has been updated, otherwise
you will get only the text that was there before the copy paste
since this is "shouldChangeTextInRange" method, not
"didChangeTextInRange", if you do this I suggest stripping the
"\n" or "\r" from the end of your final string after the copy-paste
was made and applied and the text was updated.
*/
- 1. Phản hồi JSON jQuery AJAX trả về khóa "d"
- 2. UITextView từ chối phản hồi đầu tiên về 'Xong'
- 3. UITextView với nút "Xong" * và * Phím "Trả về"?
- 4. Làm thế nào để trả về một phản ứng JSON phức tạp với Node.js?
- 5. C# string.IndexOf() trả về giá trị không mong muốn
- 6. Ngăn chặn trình duyệt web từ đóng cửa cho đến khi phản ứng AJAX được trả về
- 7. Cách trả về phản hồi động trong SoapUI MockService
- 8. Thay đổi phím trả về thành phím đã hoàn tất trên Bàn phím iPhone (UITextView)
- 9. Làm cho phản hồi trả về Django là "tên tệp khác"
- 10. Có vectơ weak_ptr, muốn trả về véc tơ của shared_ptr
- 11. Twitter OAUTH - trả về mã phản hồi của "0"
- 12. Chức năng xem không trả về một phản hồi
- 13. GetType(). ToString() Trả về các ký tự không mong muốn
- 14. SoapUI MockServices trả về html thay vì phản hồi xml
- 15. Android: Mã phản hồi trong ứng dụng V3 trả về khi hết thời gian chờ?
- 16. Làm cách nào để nginx trả về phản hồi tĩnh và gửi tiêu đề yêu cầu đến ứng dụng?
- 17. Lỗi kết nối URL - java.io.IOException: Máy chủ trả về mã phản hồi HTTP: 400 cho URL
- 18. Làm thế nào để thực thi javascript bên trong một thẻ script được trả về bởi một phản ứng ajax
- 19. Tôi muốn "(int) null" trả lại cho tôi 0
- 20. Làm cách nào để trả về phản hồi JSON một phần bằng Java?
- 21. Trả về kết quả trong từ khóa Khung robot?
- 22. Làm thế nào để làm cho phản ứng bình phản ứng với máy khách một cách không đồng bộ?
- 23. Oracle - trả về giá trị khóa mới được chèn
- 24. Liệu "toán tử =" trả về loại vấn đề nếu tôi muốn làm cho lớp không thể sao chép được?
- 25. Tại sao parseInt trả về NAN cho chuỗi "08" và trả về 7 cho chuỗi "07"?
- 26. Trả về "null" trên hàm trả về nguyên thủy?
- 27. Chuyển đổi ứng dụng Android từ mô hình miễn phí/trả phí sang mở khóa trả phí trong ứng dụng
- 28. int.TryParse() trả về false cho "#. ##"
- 29. Delphi: Indy - làm thế nào để có được cơ thể phản ứng về lỗi?
- 30. Làm thế nào để làm cho UITextView "Done" nút resignFirstResponder?
Tôi tin rằng đây là câu trả lời bạn đang tìm kiếm: http://stackoverflow.com/questions/4750606/iphone-resign-keyboard-with-done-button-action- with-xib # 4861018 –
Tôi mong bạn thay đổi câu trả lời đã chọn hiện tại vì câu trả lời không chính xác trong nhiều trường hợp. –