ActionSheet Dismiss 后键盘自动隐藏[重复]

问题描述 投票:0回答:2

我可以被认为是iOS应用程序的新手,

现在我这里有一个小问题,在我的代码中我添加了

[myTextView becomeFirstResponder]
因为我希望键盘固定在屏幕上。 我碰巧在同一个屏幕上有一个
actionSheet
,我注意到每次我调用操作表来关闭时,键盘也会关闭,而无需我调用
[myTextView resignFirstResponder]
。这很烦人,因为当我关闭操作表时,我真的不想关闭键盘,我希望键盘保留在屏幕上。

请有人向我解释一下,如果您知道一些解决方案,如果您能提供帮助,我将很高兴。

谢谢!

ios objective-c uitextview uiactionsheet
2个回答
0
投票

奇怪,我看到,如果iOS需要隐藏

UIKeyBoard
显示
UIActionSheet
的原因或其他什么,那么它会重新显示
UIKeyBoard
回来,你可以做两件事来测试,

1)寻找

[myTextView resignFirstResponder]
并在那里放置断点,

2) 如果您实现了

UITextView
委托,
- (void)textViewDidEndEditing:(UITextView *)textView
也将断点放在那里。

3) 如果您发现光标在

UIActionSheet
关闭时进入断点,那么您必须更正隐藏它的流程。

如果你还是不明白,你可以重新显示

UIKeyBoard
,当
UIActionSheet
被解雇时,用
[myTextView becomeFirstResponder]


0
投票

您可以在控制器的.m文件中使用私有本地类别

@interface UIActionSheet (NonFirstResponder)
@end

@implementation UIActionSheet (NonFirstResponder)
- (BOOL)canBecomeFirstResponder
{
    return NO;
}
@end

它将把您的键盘保存在呈现的操作表上。但是,当您尝试关闭操作表时,它将导致以

结尾的系统调用链
[NSNotificationCenter postNotificationName:object:userInfo:]
[UIInputViewTransition postNotificationForTransitionStart]

这里我们得到UIKeyboardWillHideNotification并且键盘被系统关闭。

因此,您只能将 textView 标记为单击操作表按钮时的第一响应者。但它可能会导致一些额外的 UI 转换。

© www.soinside.com 2019 - 2024. All rights reserved.