【问题标题】:How to hide keyboard and select text programmatically at the same time in UITextview?如何在 UITextview 中同时以编程方式隐藏键盘和选择文本?
【发布时间】:2012-03-17 14:00:51
【问题描述】:

我在 -(void)viewDidLoad 中有以下代码

[txtView becomeFirstResponder];
[txtView setSelectedRange:NSMakeRange(0, 10)];

也就是说,我想以编程方式在我的 UITextView 中选择文本。 同时,我不希望键盘出现。 我尝试添加以下代码 -

[txtView setEditable:NO];

或

[txtView resignFirstResponder];

虽然它们使键盘隐藏起来,但无论哪种方式都会使文本选择消失。

总而言之,我想以编程方式选择文本并同时禁用键盘。 我认为这是可能的,因为当我有 [txtView setEditable:NO];我仍然可以触摸屏幕来选择文本。 问题只是我不知道如何以编程方式做到这一点。 有人可以帮我吗?

【问题讨论】:

  • 请问您为什么要违反 HIG?

标签: objective-c ios uitextview


【解决方案1】:

来自-resignFirstResponder 上的文档:

子类可以覆盖这个方法来更新状态或执行一些 操作,例如取消突出显示选择,或返回 NO,拒绝 放弃第一响应者的身份。如果你重写这个方法,你 必须在您的某个时间点调用 super (超类实现) 代码。

您需要继承 UITextView 并覆盖 -resignFirstResponder 方法,可能像这样:

- (BOOL)resignFirstResponder {
    [self setEditable:NO];
    [self setSelectedRange:NSMakeRange(0, 10)];
    return YES;

}

理论上,这应该可行,但 resignFirstResponder 内部的细节可能不太喜欢它。

【讨论】:

    【解决方案2】:

    您可以使用很少的延迟来执行此操作。看到这个,

    在 viewDidLoad 中编写这段代码

    [txtView becomeFirstResponder];
    [txtView setSelectedRange:NSMakeRange(0, 10)];
    [self performSelector:@selector(resignKeyBoard) withObject:nil afterDelay:.5]; 
    

    和

    -(void)resignKeyBoard
    {
       [txtView resignFirstResponder]; 
    }
    

    【讨论】:

    • 谢谢Ishu,但这不是我想要的,延迟后选择仍然消失。
    • @Nohappy,那么你需要 NSAttributedString,获取 UITextView 的内容,并且选择的部分文本必须更改为不同的颜色以显示选择。
    猜你喜欢
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    相关资源
    最近更新 更多