2011-06-14 65 views
0

是否可以在觸摸標籤欄圖標時調用方法,即使它已經是所選圖標?如果子視圖顯示,我想讓它在觸摸時刪除子視圖。UITabBar觸摸重新加載UIView

我確定必須有辦法做到這一點,因爲我在其他應用程序中看到它,但我找不到任何文檔。

回答

4

Apple Documentation for UITabBarDelegate

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item

發送到委託當用戶選擇一個選項卡欄項。 (必填)

  • 正如你注意到我認爲,和蘋果的文檔說,這條消息被髮送只有當標籤被選中

  • 一個重要的注意,已經有一個(未作記錄?)默認輕敲選擇標籤欄按鈕的UIKit行爲:

    如果選項卡包含UINavigationViewController它會發送給它一個popToRootViewControllerAnimated:消息。你可以在任何iOS應用上查看。

覆蓋此默認(和用戶預期)的行爲,這一點,一般,一個壞主意之前,所以要小心。 Apple可能隱藏了您想要在其UIKit API中執行的操作,旨在

但如果你想反正這樣做,這裏有一些想法:

  • 小,但不容易破解:一旦使用TabBar已經顯示,遞歸地瀏覽其.subviews樹找(我希望,待確認)UIButton小號繼承類(=私人UITabBarButtons或類似的東西)來添加上觸上事件目標/選擇器對(你可能必須先刪除默認的行爲,這可能會非常棘手)
  • 最差SOLUT離子,但可能是唯一一個:不要使用UITabBar,而是一個自定義類。我很確定有一些模擬UITabBar的即用型開源組件,但很抱歉,我從未使用/搜索過一個。
+0

那麼這使我想到第二個問題,如果你不介意的話,它是可能使用UINavigationController的功能與頂部的酒吧? – Weston 2011-06-14 11:40:58

+0

我想你可以通過欺騙一些*(髒)*像'.origin.y - = 44'和'.frame.heigth + = 44'或者只是隱藏'navigationBar'。骯髒....你真的應該考慮添加一個刷新按鈕,更明確的用戶,而不是使用「技巧」來刷新視圖,這從UX的角度來看是不好的。 (用戶將永遠不會如何刷新視圖!) – 2011-06-14 11:51:09

+0

我的應用程序是非常苛刻的屏幕房地產,你可能是正確的,但我會嘗試你的建議,但我可能不得不改變。謝謝。 – Weston 2011-06-14 11:54:13

0

您可以爲代表的UITabBarController,

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); 
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController; 

也請通過這個文件:UITabBarController delegate protocol