Клавиатура скрывается и отображается снова сразу после закрытия UIActionSheet в iOS 7, SDK 7
Я создаю UIActionSheet в моем ViewController. Я также добавляю код, чтобы поймать уведомление 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, 0, 100, 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
Ответы
Ответ 1
Существует очень простое решение. Нужно добавить частную локальную категорию в .m файл контроллера
@interface UIActionSheet (NonFirstResponder)
@end
@implementation UIActionSheet (NonFirstResponder)
- (BOOL)canBecomeFirstResponder
{
return NO;
}
@end
Это единственный побочный эффект. Ваш texField/textView сохраняет фокус во время представления рабочего листа. Но это не большая проблема, я думаю.
Также можно подобрать UIActionSheet таким же образом.
Ответ 2
Он отлично работает.
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
if(textField==myTextField2){
[myTextField1 resignFirstResponder];
[self showActionSheet];
return NO;
}
return YES;
}