有没有办法阻止键盘解雇?

Pen*_*One 27 iphone uitextfield uikeyboard ipad ios

我意识到这与大多数帖子相反,但我希望即使按下"键盘向下"按钮键盘也能保持运行状态.

具体来说,我有两个视图UITextField.使用以下委托方法

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

即使用户按下键盘上的Done按钮或点击屏幕上任何其他位置的按钮,我也可以保持键盘上升除了键盘右下方那个讨厌的键盘向下按钮.

我正在使用这个视图就像一个模态视图(尽管视图与一个在UINavigationController中被推送的ViewController相关联),所以从用户的角度来看,它确实能够始终保持键盘的正常运行.如果有人知道如何实现这一目标,请告诉我!谢谢!

更新仍然没有解决方案!当Done按下时,它会触发textFieldShouldReturn,但是当Dismiss按下按钮时,它会触发textFieldDidEndEditing.我无法阻止textField结束编辑或它永远不会消失.不知何故,我真的想要一个检测Dismiss按钮并忽略它的方法.如果你知道一种方法,请赐教!

Jac*_*ard 12

有办法做到这一点.因为UIKeyboard子类UIWindow,唯一足够大的东西UIKeyboard是另一种UIWindow.

- (void)viewDidLoad {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(coverKey) name:UIKeyboardDidShowNotification object:nil];
    [super viewDidLoad];
}

- (void)coverKey {
    CGRect r = [[UIScreen mainScreen] bounds];
    UIWindow *myWindow = [[UIWindow alloc] initWithFrame:CGRectMake(r.size.width - 50 , r.size.height - 50, 50, 50)];
    [myWindow setBackgroundColor:[UIColor clearColor]];
    [super.view addSubview:myWindow];
    [myWindow makeKeyAndVisible];
}
Run Code Online (Sandbox Code Playgroud)

这适用于iPhone应用程序.没试过用iPad.您可能需要调整大小myWindow.另外,我没有做任何内存管理myWindow.所以,也考虑这样做.


Nic*_*ver 7

我想我找到了一个很好的解决方案.

添加BOOL作为实例变量,让我们调用它 shouldBeginCalledBeforeHand

然后实现以下方法:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    shouldBeginCalledBeforeHand = YES;
    return YES;
}

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    return shouldBeginCalledBeforeHand;
}

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    shouldBeginCalledBeforeHand = NO;
}
Run Code Online (Sandbox Code Playgroud)

以及

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

使用返回按钮防止键盘消失.诀窍是,从一个文本字段到另一个文本字段的焦点切换将事先触发textFieldShouldBeginEditing.如果按下关闭键盘按钮,则不会发生这种情况.文本字段获得焦点后,该标志将重置.