2015-05-11 2 views
0

Есть ли изящный способ получения кадра (размера) любого входного вида в настоящее время? Изящным я имею в виду не увольнение, а затем повторное включение первого ответчика, поскольку это отбрасывает любые данные состояния kbd, например. Состояние клавиши Shift.Получить текущую рамку клавиатуры изящно?

То, что я в настоящее время сделать это:

- (CGSize)inputViewSize 
{ 
    __block CGSize result = CGSizeZero; 
    UIResponder *firstResponder = [self getFirstResponder]; 
    id observer = [NSNotificationCenter.defaultCenter addObserverForName:UIKeyboardDidShowNotification object:nil queue:nil usingBlock:^(NSNotification *note) 
    { 
     result = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].size; 
    }]; 
    [firstResponder resignFirstResponder]; 
    [firstResponder becomeFirstResponder]; 
    [NSNotificationCenter.defaultCenter removeObserver:observer]; 
    return result; 
} 

EDIT: То, что я должен был делать это:

@implementation UIApplication (KeyboardFrame) 

static CGRect _keyboardFrame = (CGRect){ (CGPoint){ 0.0f, 0.0f }, (CGSize) { 0.0f, 0.0f } }; 
+ (CGSize)keyboardSize { return _keyboardFrame.size; } 

+ (void)load 
{ 
    [NSNotificationCenter.defaultCenter addObserverForName:UIKeyboardDidShowNotification object:nil queue:nil usingBlock:^(NSNotification *note) 
    { 
     _keyboardFrame = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; 
    }]; 
    [NSNotificationCenter.defaultCenter addObserverForName:UIKeyboardDidChangeFrameNotification object:nil queue:nil usingBlock:^(NSNotification *note) 
    { 
     _keyboardFrame = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; 
    }]; 
    [NSNotificationCenter.defaultCenter addObserverForName:UIKeyboardDidHideNotification object:nil queue:nil usingBlock:^(NSNotification *note) 
    { 
     _keyboardFrame = CGRectZero; 
    }]; 
} 

@end 

ответ

0

Вы должны наблюдать уведомления клавиатуры. Вы можете использовать следующие два уведомления, если изменения клавиатуры каркасные представляют интерес:

UIKeyboardWillChangeFrameNotification 
UIKeyboardDidChangeFrameNotification 
+0

Они не вызывают каких-либо больше, чем 'UIKeyboardDidShowNotification', если' firstResponder' не первый подал в отставку, а затем повторно активируется, что то, что я надеюсь, чтобы избежать здесь. –

+0

Я только что протестировал. Эти уведомления работают для меня как-то. –

+0

Просьба уточнить код. Чтобы напомнить вам, будущие изменения фрейма клавиатуры меня не интересуют (и я знаю, как это сделать), только существующий фрейм во время вызова. –

Смежные вопросы