1

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

我已经修改了 textview 代表来执行换行与解除键盘机制,并将键盘返回键从 UIReturnKeyDefault 切换到 UIReturnKeyDone 并且换行与解除机制效果很好。我唯一的问题是,当我将返回键类型更改为 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;
}

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

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 回答