我在ViewController中创建一个UIActionSheet.我还添加了代码来捕获UIKeyboardWillShowNotification和UIKeyboardWillHideNotification通知.
我的问题是当我解雇,我得到两个通知键盘隐藏和再次显示.
有人可以告诉我如何防止这个问题?它只发生在iOS 7中,并使用SDK 7构建
更新一些代码:
在viewDidLoad中,我初始化一个按钮,当触摸按钮,操作表将被显示.
- (void)viewDidLoad { [super viewDidLoad]; UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; button.frame = CGRectMake(10,50,100,30); [button setTitle:@"Open menu" forState:UIControlStateNormal]; [button addTarget:self action:@selector(buttonTouched) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button]; UITextView* textView = [[UITextView alloc] initWithFrame:CGRectMake(0,40)]; [self.view addSubview:textView]; [textView becomeFirstResponder]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; } - (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar{ [searchBar resignFirstResponder]; } - (void) buttonTouched{ UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:@"Action sheet" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Destructive" otherButtonTitles:@"Hello",nil]; [actionSheet showInView:self.view]; } - (void)keyboardWillShow:(NSNotification*)notification{ NSLog(@"keyboardWillShow"); } - (void)keyboardWillHide:(NSNotification*)notification{ NSLog(@"keyboardWillHide"); }
我运行应用程序,键盘会显示,我触摸按钮,动作表显示.我通过触摸其上的任何按钮关闭操作表,并记录打印:
keyboardWillShow
keyboardWillHide
keyboardWillShow
解决方法
有一个非常简单的解决方案.应该在控制器的.m文件中添加私人本地类别
@interface UIActionSheet (NonFirstResponder) @end @implementation UIActionSheet (NonFirstResponder) - (BOOL)canBecomeFirstResponder { return NO; } @end
只有一个副作用.您的texField / textView在操作列表中保留焦点.但这不是我想的一大麻烦.
也可以以相同的方式对UIActionSheet进行子类化.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。