Подтвердить что ты не робот

Клавиатура скрывается и отображается снова сразу после закрытия 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

4b9b3361

Ответ 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;      
}