【问题标题】:How to redraw the keyboard of a UITExtview when i change return key type when already displayed当我在已显示的情况下更改返回键类型时如何重绘 UITextview 的键盘
【发布时间】:2014-04-16 22:57:25
【问题描述】:

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

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

【问题讨论】:

    标签: ios keyboard refresh uitextview uitextviewdelegate


    【解决方案1】:

    在我看来,一旦显示键盘,我们就无法更改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;
    }
    

    【讨论】:

    • 那是我用 NStimer 做的,但是用户不知道多少秒后它会关闭这就是为什么我想将返回键更改为完成,他知道这样,但是作为您说除了关闭和召回键盘之外,可能无法刷新键盘。您是否知道我们是否可以将键盘最初的显示方式(从底部滑动)更改为无幻灯片/动画,也许我可以更改键、关闭、调用键盘并且用户只会看到返回键更改而没有幻灯片出并滑入动画。有什么线索吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 2020-03-23
    • 2023-03-19
    • 2011-07-27
    • 2012-10-08
    • 2010-10-16
    相关资源
    最近更新 更多