当我已经显示时更改返回键类型时,如何重绘UITExtview的键盘

时间:2014-03-12 16:24:36

标签: ios keyboard refresh uitextview uitextviewdelegate

在UitTextview中,我希望键盘返回键在用户输入时像换行键一样操作,并且我想让相同的键在几秒钟不活动后转到完成键并在触摸时关闭键盘而不是插入换行符

我已经修改了textview委托来执行newline与dismiss键盘机制,并将键盘返回键从UIReturnKeyDefault切换到UIReturnKeyDone,并且newline与dismiss机制的效果很好。我唯一的问题是当我将返回键类型更改为self.TextView.returnKeyType = UIReturnKeyDone;键盘没有刷新/重绘,我看不到完成键。我试过在UITextView和我的主视图上做一个setNeedsDisplay,但没有任何反应。键盘返回键不会改变。当键盘被解除然后在用户重新输入textview时重新出现,那么完成的键就在这里。

键盘处于活动状态并显示时,如何重绘完成键?

以下是我使用的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;
}

我到处寻找,但在显示键盘时无法找到有关如何刷新键盘按键的任何信息。 有任何想法吗 ? 谢谢你的帮助

1 个答案:

答案 0 :(得分: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;
}