[英]How to create physical menu button (like the one in Android) menu in iPhone?
我正在開發iPhone中基於導航的應用程序。
我想在其中創建類似於Android手機中的菜單之類的物理菜單按鈕。
可以從層次結構中的任何視圖訪問菜單。
任何人都不知道我們如何實現這一目標。
我們可以在UINavigationBar中添加類似菜單的抽屜嗎?
請不要建議tabbarcontroller,因為它是最后一個選項。
我認為您只需要將UINavigationItem的titleView設置為任意UIView即可處理用戶點擊。
這不必是文本標簽:)
如果是這種情況,那么我建議您采用帶有跟蹤視圖控制器堆棧層次結構的標志的sharedInstance
。 每次用戶導航時,只需更新您的sharedInstance
並進行自定義菜單准備並填充它。 好的做法是重用您的UI組件,而不是在每次導航操作中都對其進行更新。
您應該做的是創建UIViewController
的子類,例如MasterViewController
。 具有所有視圖控制器子類MasterViewController
。 在MasterViewController
您可以編寫代碼來創建和顯示抽屜視圖,然后所有視圖控制器都將繼承該代碼並可以隨時對其進行調用。
滑動視圖:
drawerView.frame = CGRectMake(0, -1*drawerView.frame.size.height, self.view.frame.size.width, whateverHeight);
[UIView beginAnimations:nil context:NULL];
drawerView.frame = CGRectMake(0, 0, self.view.frame.size.width, whateverHeight);
[UIView commitAnimations];
您可以創建一個“ DrawerView
”類,並將其導入到要使用它的位置。 然后,您可以使用presentModalViewController: myDrawer
使它在需要時顯示。 希望有道理。
非常簡單
在一個XIB中,您可以添加許多視圖。 現在添加兩個主要視圖,例如說數據視圖和您想要的向下按鈕視圖。(如果有4個按鈕需要導航)現在將您的視圖保持在頂部。 您可以在該數據視圖中添加所有其他視圖層次結構。
我認為您應該為此創建一個單例UIViewController
或UIView
。 UIViewController
優點是可以使用presentModalViewController:animated:
方法來呈現它,並且如果需要,也可以將其推送到導航堆棧中。 同時擁有一個UIView
實例的另一個優點是。
使用單例模式,您可以在任何地方上課。
檢查官方文檔中有關Objective-c中的單例的鏈接: 創建單例實例
或者您可以使用Matt Gallagher的宏(因為使用起來非常舒適): Singleton宏
如果您可以獲得iOS 5 Beta,我強烈推薦您。 新的beta開發版本在UIViewController
上進行了擴展,被Apple稱為容器視圖控制器。 它們非常容易設置,我正在我的應用程序中使用一個。
容器視圖控制器的工作方式類似於UINavigationControllers
和UITabBarControllers
,它們使您可以添加子視圖控制器 ,而不僅僅是子視圖。 就像我說的那樣,它們很容易設置。 我將解釋如何:
創建一個名為ContainerController
的新類。 添加一個名為- (id)initWithNavigationController:(UINavigationController *)controller
的初始化方法。 它的實現應如下所示:
if ((self = [super init])) { [self addChildViewController:controller]; controller.view.frame = CGRectMake(0, 0, 320, 420); // Leave room for the menu at bottom of the screen [self.view addSubview:controller.view]; }
我們添加導航控制器的原因是因為它使此容器控制器無法進行轉換,這更加復雜。
在ContainerController
的viewDidLoad
方法中,創建菜單:
[super viewDidLoad]; UIView *menuWrapperView = [[[UIView alloc] init] autorelease]; menuWrapperView.frame = CGRectMake(0, 420, 320, 40); // Place a wrapper for the menu buttons directly below the navigation controller UIButton *button1 = ...; UIButton *button2 = ...; [menuWrapperView addSubview:button1]; [menuWrapperView addSubview:button2]; [self.view addSubview:menuWrapperView];
通過這種方法(使用子視圖控制器),視圖和導航控制器將在需要時收到其所需的內存警告,視圖加載和旋轉處理方法調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.