2014-11-07 75 views
0

當我觸摸標籤UIMenuController與我的自定義項目列表一起出現時,效果很好。但是當UIMenuController出現在標準UISearchBar我也看到我所有的自定義項目。爲什麼?UIMenuController顯示錯誤的項目

當我觸摸標籤時,我只需要顯示標準UISearchBar和自定義項目的標準(複製,粘貼)項目。你能解釋我應該怎麼做?

UPDATE

我做了什麼(不好的解決方案):

如果我們有鍵盤,這是搜索欄,如果我們不這樣做,那就是標籤。

標誌,這意味着我將使用哪些物品清單

BOOL standardList; 

註冊鍵盤出現/消失

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 
} 

-(void)viewWillDisappear:(BOOL)animated 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil]; 

    [super viewWillDisappear:animated]; 
} 

-(void)keyboardWillShow:(id)sender 
{ 
    standardList = YES; 
} 

-(void)keyboardWillHide:(id)sender 
{ 
    standardList = NO; 
} 

並檢查標誌,在接下來的方法:

- (BOOL) canPerformAction:(SEL)selector withSender:(id) sender 
{ 

    if (selector == @selector(copy:)) 
    { 
     return YES; 
    } 

    if (!standardList) 
    { 
     if ((selector == @selector(makeCall:)) || (selector == @selector(createNewContact:))) 
     { 
      return YES; 
     } 
    } 

    return NO; 
} 

那BUT:iPad的鍵盤有「隱藏鍵盤」按鈕,鍵盤可以隱藏不用[UISearchBar resingFirstResponder]

即使我添加下一行:

-(void)keyboardWillHide:(id)sender 
{ 
    standardList = NO; 
    [mySearchController setActive:NO]; 
} 

這仍然是壞的解決方案 - 我不能隱藏鍵盤,而搜索和滾動的搜索結果。

有什麼建議嗎?

回答

0

一個解決方案: 你可以在你定製UIMenuController後重置UIMenuItems。 UIMenuController的addObserver將隱藏菜單通知。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willHideEditMenu:) name:UIMenuControllerWillHideMenuNotification object:nil]; 

然後在willHideEditMenu:功能

-(void)willHideEditMenu:(NSNotification *)object 
{ 
    //any other thing u want to do. 
    [[UIMenuController shareMenuController] setMenuItems:nil]; 
} 

這樣,在其他地方UIMenuController單將不會被什麼ü做了其中u定製它的影響。

其他解決方案: 我認爲根本原因爲什麼ü有這個問題爲u有同名的一些功能「MakeCall函數:」或「createNewContact:」在其他視圖或視圖控制器(基本上可以在任何UIResponder),其是你有這個問題的地方的父視圖(viewcontroler)。 所以查看響應者樹,看看你是否可以找到任何具有相同名稱的UIMenuItem選擇器的選擇器。因爲

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender; 

是任何UIResponder的函數,它可以被調用。如果它碰巧有一個名字相同的選擇器,它可能會返回YES,並且你會遇到這個問題。要解決這個問題,只需重命名UIMenuItem的選擇器即可。


我的英文不好。希望你明白我的觀點並嘗試一下。

相關問題