1

也有類似的問題,但他們都知道案件,當他們知道哪些視圖正在編輯。在iOS中隱藏任何視圖的鍵盤?

在我的情況下,我有一個本地通知,我想隱藏鍵盤時,應用程序變得活躍。

在同一時間我有一個複雜的導航,涉及MMDrawerController和模態意見。所以我不能只取最頂層的視圖控制器並迭代它的子視圖。

那麼你能解釋如何隱藏鍵盤,如果我不知道目前正在查看的視圖?

回答

1

類別添加到UIResponderGet 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];

+0

如何解決這個問題呢?您可以在此類別內添加「+(void)hideKeyboard」方法。 –

0

只是遍歷視圖你想隱藏鍵盤和檢查view.isFirstResponder如果它的真實然後只是做view.resignFirstResponder

-1

您需要獲取DrawerViewController的中心面板,並從didReceiveRemoteNotification方法添加以下代碼。

[drawerController.centerViewController.view resignFirstResponder]; 
+0

與「self.view」相同 - 如果'centerViewController'沒有文本字段會怎麼樣?在我的情況下,它甚至包含導航控制器 –