2014-03-12 86 views
0

在UitTextview中,我希望鍵盤返回鍵操作時像一個換行符鍵時,用戶正在鍵入,並且我想要相同的鍵轉到一個完成鍵後幾秒鐘的不活動和解僱鍵盤時觸摸而不是插入一個換行如何當我更改返回鍵類型時,已經顯示的UITExtview的鍵盤

我已經修改了textview委託做新行與關閉鍵盤機制,並將鍵盤返回鍵從UIReturnKeyDefault切換到UIReturnKeyDone和換行符與解僱機制很好。我唯一的問題是,當我將返回鍵類型更改爲self.TextView.returnKeyType = UIReturnKeyDone;鍵盤不刷新/重繪,我看不到完成的鍵。我試過在UITextView和我的主視圖上做一個setNeedsDisplay,但沒有任何事情發生。鍵盤返回鍵不會改變。當鍵盤被解散,然後當用戶重新輸入文本視圖時重新出現,那麼完成鍵在這裏。

當鍵盤處於活動狀態並顯示時,我應該如何重新繪製完成的鍵?

這裏是我使用的UITextView的代表:

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    text_newline_mode=YES; 
    self.TextView.returnKeyType = UIReturnKeyDefault; 
} 

- (void)textViewDidChange:(UITextView *)txtView 
{ 
    text_newline_mode=YES; 
    self.TextView.returnKeyType = UIReturnKeyDefault; 
    if (keyboard_timer) 
     [keyboard_timer invalidate]; // cancel previous timer when user continue typing 
     keyboard_timer = [NSTimer scheduledTimerWithTimeInterval:3.0 
            target:self 
            selector:@selector(enableKeyboardDoneKey:) 
            userInfo:nil 
            repeats:NO]; 

} 
-(void)enableKeyboardDoneKey:(NSTimer *)timer 
{ 
    text_newline_mode=NO; 
    keyboard_timer = nil; 
    self.TextView.returnKeyType = UIReturnKeyDone; 
    [self.TextView setNeedsDisplay]; // this does not refresh the keyboard 
    [self.view setNeedsDisplay]; //this does not help neither 

} 
- (BOOL)textViewShouldEndEditing:(UITextView *)textView 
{ 
    if (text_newline_mode==YES) 
    { 
     self.TextView.text = [self.TextView.text stringByAppendingString:@"\n"]; 
    return NO; 
    } 
    else return YES; 
} 
- (void)textViewDidEndEditing:(UITextView *)txtView 
{ 
    self.feedbackTextView.returnKeyType = UIReturnKeyDefault; 
    text_newline_mode=YES; 
} 
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 

    if(([text isEqualToString:@"\n"]) && (text_newline_mode==NO)) 
    { 
     [textView resignFirstResponder]; 
     return NO; 
    } 
    return YES; 
} 

我到處找,但沒能找到,同時顯示鍵盤如何刷新鍵盤按鍵的任何信息。 有什麼建議嗎? 感謝您的幫助

回答

0

在我看來,一旦顯示鍵盤,我們不能更改returnKeyType。我有其他替代品。一旦檢查這一點。

存儲最初輸入密鑰的時間,然後將其與輸入新密鑰時的時間進行比較。然後,根據您的時間延遲,請檢查您的病情在

static NSDate *tempDate = [NSDate date]; 


- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    //Store the initial time 

    NSDate *dateEntered = [NSDate date]; 
    NSTimeInterval interval = [dateEntered timeIntervalSinceDate:tempDate]; 

    if (interval > 10.0f) //10.0 is your buffer time, after which you want to dismiss the keyboard 
    { 

     if ([text isEqualToString:@"\n"]) { 
      [textView resignFirstResponder]; 
      return NO; 
     } 

    } 

    tempDate = dateEntered; 

    return YES; 
} 
+0

這是我是用的NSTimer做,但後來用戶不後,會在多少秒解僱這就是知道我爲什麼要改變返回鍵這樣他就知道了,但正如你所說的,也許除了解僱和回憶它以外,刷新鍵盤是不可能的。你有什麼想法,我們是否可以改變原來的鍵盤顯示方式(從底部滑動)到沒有幻燈片/動畫,也許我可以改變鍵,解散,重新調用鍵盤,用戶只會看到返回鍵的變化,沒有幻燈片在動畫中滑出並滑動。任何線索? –

相關問題