也有類似的問題,但他們都知道案件,當他們知道哪些視圖正在編輯。在iOS中隱藏任何視圖的鍵盤?
在我的情況下,我有一個本地通知,我想隱藏鍵盤時,應用程序變得活躍。
在同一時間我有一個複雜的導航,涉及MMDrawerController
和模態意見。所以我不能只取最頂層的視圖控制器並迭代它的子視圖。
那麼你能解釋如何隱藏鍵盤,如果我不知道目前正在查看的視圖?
也有類似的問題,但他們都知道案件,當他們知道哪些視圖正在編輯。在iOS中隱藏任何視圖的鍵盤?
在我的情況下,我有一個本地通知,我想隱藏鍵盤時,應用程序變得活躍。
在同一時間我有一個複雜的導航,涉及MMDrawerController
和模態意見。所以我不能只取最頂層的視圖控制器並迭代它的子視圖。
那麼你能解釋如何隱藏鍵盤,如果我不知道目前正在查看的視圖?
類別添加到UIResponder
: Get the current first responder without using a private API
static __weak id currentFirstResponder;
@implementation UIResponder (FirstResponder)
+(id)currentFirstResponder {
currentFirstResponder = nil;
[[UIApplication sharedApplication] sendAction:@selector(findFirstResponder:) to:nil from:nil forEvent:nil];
return currentFirstResponder;
}
-(void)findFirstResponder:(id)sender {
currentFirstResponder = self;
}
+(void)hideKeyboard {
id firstResponder = [UIResponder currentFirstResponder];
if([firstResponder respondsToSelector:@selector(endEditing:)]) {
[firstResponder endEditing:YES];
}
}
@end
導入類別,並在你的行動,隱藏鍵盤下方做:
if([[UIResponder currentFirstResponder] respondsToSelector:@selector(endEditing:)]) {
[[UIResponder currentFirstResponder] endEditing:YES];
}
通過該解決方案,你不需要知道目前正在查看。只需獲得當前的第一響應者並致電endEdition:
即可。對於可編輯視圖變爲編輯時,它將成爲第一響應者。
編輯:
隨着Vyachaslav Gerchicov的建議下,我在類別中添加hideKeyboard
方法。並致電[UIResponder hideKeyboard];
。
只是遍歷視圖你想隱藏鍵盤和檢查view.isFirstResponder
如果它的真實然後只是做view.resignFirstResponder
。
您需要獲取DrawerViewController的中心面板,並從didReceiveRemoteNotification方法添加以下代碼。
[drawerController.centerViewController.view resignFirstResponder];
與「self.view」相同 - 如果'centerViewController'沒有文本字段會怎麼樣?在我的情況下,它甚至包含導航控制器 –
如何解決這個問題呢?您可以在此類別內添加「+(void)hideKeyboard」方法。 –