1

UitTextview では、ユーザーが入力しているときにキーボードのリターン キーが改行キーのように動作するようにし、同じキーが数秒間非アクティブになった後に完了キーに変わり、改行を挿入する代わりにタッチするとキーボードを閉じるようにしたい

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;
}

私はいたるところを見ましたが、キーボードが表示されているときにキーボードのキーを更新する方法に関する情報を見つけることができませんでした. 何か案は ?ご協力いただきありがとうございます

4

1 に答える 1

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;
}
于 2014-03-13T10:58:07.910 に答える