2013-08-20 2 views
1

textViewDidChangeSelection 대리자 내의 textView에 대해 selectedRange 속성을 설정하는 이상한 동작이 발생합니다.textViewDidChangeSelection 내의 이상한 UItextView 비헤이비어 설정 범위

있는 viewDidLoad에서 내 코드는 다음과 같이

hiddenTextView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 500, 500)]; 
//[hiddenTextView setHidden:YES]; 
[email protected]"ulrd"; 
hiddenTextView.text = _hiddenTextViewText; 
hiddenTextView.delegate = self; 
_hiddenTextViewDefaultRange = NSMakeRange(2,0); 
hiddenTextView.selectedRange = _hiddenTextViewDefaultRange; //horizontal and vertical center of the textview 
[self.view addSubview:hiddenTextView]; 

[hiddenTextView becomeFirstResponder]; 
if (_keyboardShown) 
    [hiddenTextView resignFirstResponder]; 

은 내가 textViewDidChangeSelection을 정의

- (void)textViewDidChangeSelection:(UITextView *)textView { 

    NSLog(@"%lu",(unsigned long)textView.selectedRange.location); 


    if (textView.selectedRange.location != _hiddenTextViewDefaultRange.location) 
    { 
     hiddenTextView.selectedRange = _hiddenTextViewDefaultRange; 
    } 

} 

내가 4 문자 텍스트를 설정하고 위치 2 (가운데)의 선택 인덱스를 넣어. 결과는 시뮬레이터 NSLog에서 키보드의 화살표를 누르면 0 (텍스트 시작)을 출력 한 다음 2 (위치 재설정)가 올바른 것입니다. 다시 누르시면 똑같은 일을 계속합니다. 문제는 내가 x 번 쳤을 때 텍스트의 끝 부분 (4 번 위치)으로 갈 수 있기 전에 똑같은 시간을 맞춰야한다는 것입니다. 프로그래밍 방식으로 작업하는 대신 UIButton으로 위치를 재설정하려고 시도했지만 정상적으로 작동합니다. 어떤 아이디어?

+1

실제 장치에 키보드를 연결하고 테스트 해 보셨습니까? 그것이 시뮬레이터에서만 발생한다면 그것은 중요하지 않습니다. –

+0

방금 ​​해 보았습니다. 블루투스 키보드가있는 iPad에서도 똑같은 일이 발생합니다. –

답변

2

나는이 문제를 극복 할 수 있었다. 대신에 :

hiddenTextView.selectedRange = _hiddenTextViewDefaultRange; 

내가 사용 :

dispatch_async(dispatch_get_main_queue(), ^{ 
      textView.selectedRange = hiddenTextViewDefaultRange; 
     }); 

은 ... 명령 비동기을 실행합니다. 그것은 효과가 있었지만, 왜 그런 식으로해야하는지 잘 모르겠습니다.

+0

팝업 메뉴를 숨기는 부작용이 있습니다 ... – hoshi