2013-08-20 79 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