2015-01-10 3 views
1

Я развивающихся ИОС 8 пользовательских клавиатуры и я сталкиваюсь следующий вопрос:Предотвратить призвание viewDidLayoutSubviews на взаимодействие пользователя с прошивкой 8 пользовательских клавиатуры

- (void) viewDidLayoutSubviews{} метод из UIInputViewController подкласса называется каждый раз, когда пользователь касается клавиатуры (коснитесь, проведите пальцем и т. д.). Я хотел бы избежать этого, нет необходимости называть его, когда пользователь прикасается к клавиатуре.

Кроме того, я обнаружил, что если я комментирую следующие строки, viewDidLayoutSubviews не вызывается больше, когда пользователь взаимодействует с клавиатурой:

NSLayoutConstraint *keyboardButtonLeftSideConstraint = [NSLayoutConstraint constraintWithItem:self.customKeyboardView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]; 
NSLayoutConstraint *keyboardButtonBottomConstraint = [NSLayoutConstraint constraintWithItem:self.customKeyboardView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0]; 
[self.view addConstraints:@[keyboardButtonLeftSideConstraint, keyboardButtonBottomConstraint]]; 

Но я не могу избавиться от этих ограничений, потому что они нужны, чтобы изменить высота клавиатуры. Как я могу это решить?

ответ

0

Я настоятельно рекомендую вам не использовать viewDidLayoutSubviews (а также viewWillLayoutSubviews) в расширении клавиатуры. Они будут вызваны из-за изменения кадра, изменения ограничений и многих других событий, которые иногда могут вызывать неожиданные проблемы. viewDidAppear может быть заменой.

Если вам действительно нужно переопределить viewDidLayoutSubviews, попробуйте использовать флаги, чтобы предотвратить его неправильное обращение.

-(void)viewDidLayoutSubviews { 
    if (self.alreadyLoaded) { 
     return; 
    } 
    else { 
    //... 
    } 
}