UitextView에는 이벤트가 없습니다
-
22-07-2019 - |
문제
일부 텍스트를 캡처하기 위해 멀티 라인 텍스트 필드 (UitextView)가 필요한 iPhone 응용 프로그램을 개발 중입니다.
사용자가 TextView 내부에 터치하면 FIRSTROPONDE가되고 키보드가 표시됩니다. 내가 정말로해야 할 일은 사용자가 완료되면 키보드를 제거하는 것입니다. 일반적으로 텍스트 필드를 사용하면 반환/완료 버튼 프레스는 입력 끝을 알리고 대의원을 사용하여 첫 번째 응답자를 사임합니다. 그러나 멀티 라인 텍스트 뷰를 사용하면 사용자가 새로운 라인을 추가하여 불가능합니다.
다음 옵션은 텍스트보기 외부에 터치가있는 경우 첫 번째 응답자를 사임하는 것입니다. 여기서 문제는 UitextView에 인터페이스 빌더에서 볼 수있는 이벤트가 없다는 것입니다.
iPhone 앱에서 멀티 라인 텍스트 필드를 만드는 방법은 사용자가 완료 될 때 현명한 시간에 첫 번째 응답자를 출시 할 수있는 방법은 무엇입니까?
해결책
탐색 표시 줄에서 완료 버튼을 사용할 수 있습니다.
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneAction:)];
}
키보드를 무시하려면 이벤트를 다음과 같이 처리하십시오.
- (void) doneAction: (id) sender{ [textView resignFirstResponder]; }
(.H 파일 선언을 기억하십시오)
다른 팁
나는 당신이 키보드의 "누락 된"완료 버튼을 애도하고 있다고 생각합니다.
명백한 접근법은 인터페이스에 첫 번째 응답자를 사임하는 다른 버튼이있는 것 같습니다.
일부 이벤트에서 키보드를 숨기는 영리한 코드는 사용하기에 직관적이라고 생각하지 않습니다.
Apple Notes 애플리케이션은 상단 오른쪽 완료 버튼을 사용하여 첫 번째 응답자를 사임합니다. 이와 같은 접근 방식은 합리적입니다.
//If user touches outside of the keypad, then the keypad will go away
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
if (touch.tapCount >= 1) {
[ZLabel resignFirstResponder];
}
}
모든 화면을 덮고 메소드를 추가하는 것보다 보이지 않는 버튼을 만들 수 있습니다. 나는 이런 STH가 효과가 있다고 생각합니다.
- (IBAction)backgroundClick:(id)sender{
[textView resignFirstResponder];
}
키보드에 '완료'키를 완전히 설정 한 경우, 내가 사용하는 메소드는 내용이 변경 될 때 UitextView에서 마지막 문자를 점검하는 것입니다. 마지막 문자가 새 줄인 경우 사용자가 완료 버튼을 누릅니다. 나는 다른 버튼이 있어야한다는 두 번째 Neil의 견해를 지키지 만 때로는 고객이 원하는 것을 얻습니다.
분명히 UitextView 가이 방법이 사는 클래스를 가리 키도록 대의원을 설정해야합니다. 그만큼 - (void)textViewDidChange:(UITextView *)inTextView
메소드는 uitextViewDelegate 프로토콜의 일부입니다.
- (void)textViewDidChange:(UITextView *)inTextView {
NSString *text = inTextView.text;
if ([text length] > 0 && [text characterAtIndex:[text length] -1] == '\n') {
message = [text substringToIndex:[text length] -1];
[delegate messageEdited];
[self removeFromSuperview];
}
}
(bool) textView : (uitextView *) TextView rithchangetextInRange : (nsRange) 범위 대체 텍스트 : (nsstring *) text {
[txtView resignFirstResponder];
반환 예; }