Как создать физическое меню кнопки (как в Android) меню в iPhone? - PullRequest
1 голос
/ 05 сентября 2011

Я разрабатываю приложение для навигации в iPhone.

, в котором я хочу создать физическую кнопку меню, такую ​​как меню в телефонах Android.

Доступ к меню можно получить с любогопросмотр в иерархии.

Есть ли у кого-нибудь идеи, как этого добиться?

Можем ли мы добавить в UINavigationBar меню, похожее на ящик?tabbarcontroller, так как это последний вариант.

Ответы [ 7 ]

1 голос
/ 13 сентября 2011

Что вам нужно сделать, это создать подкласс UIViewController, например MasterViewController.У всех контроллеров представления подкласс MasterViewControllerMasterViewController вы можете написать код для создания и отображения представления вашего ящика, а затем все ваши контроллеры представления будут наследовать этот код и могут вызывать его сами в любой момент.

Чтобы вставить представление в:

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];

1 голос
/ 09 сентября 2011

В таком случае я бы предложил вам взять sharedInstance с флагами, отслеживающими иерархию стека контроллера представления.Каждый раз, когда пользователь перемещается, просто обновите ваш sharedInstance, сделайте пользовательскую подготовку меню и заполните его.Хорошей практикой будет повторное использование компонента пользовательского интерфейса, а не создание нового для каждой операции навигации.

1 голос
/ 08 сентября 2011

Я думаю, что вам нужно просто установить titleView UINavigationItem в произвольный UIView для обработки пользовательских нажатий.

Это не обязательно должен быть текстовый ярлык:)

0 голосов
/ 15 сентября 2011

Если вы можете получить iOS 5 бета, я очень рекомендую это. Новая бета-версия имеет расширение UIViewController, которое Apple называет контроллерами контейнерного представления. Их очень легко настроить, и я использую один в своем приложении.

Контроллеры контейнерного представления работают как UINavigationControllers и UITabBarControllers в том смысле, что они позволяют добавлять дочерние представления контроллеры , а не только дочерние представления. Как я уже сказал, их просто настроить. Я объясню, как:

  1. Создайте новый класс с именем 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];
    }
    

    Причина, по которой мы добавляем контроллер навигации, заключается в том, что он не позволяет этому контроллеру контейнера выполнять переходы, что более сложно.

  2. В методе 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];
    

При таком подходе (с использованием дочерних контроллеров представлений) ваши представления и контроллер навигации получат необходимые предупреждения о памяти, загрузку представлений и вызовы методов обработки вращения, когда это необходимо.

0 голосов
/ 15 сентября 2011

Я думаю, что вы должны создать синглтон UIViewController или UIView для этого. Преимущество UIViewController в том, что он может быть представлен методом presentModalViewController:animated:, а также, если вам нужно, вы можете перенести его в свой стек навигации. Также преимущество в том, что у вас есть экземпляр UIView одновременно.
Используя шаблон синглтона, вы можете добраться до своего класса где угодно.

Проверьте эту ссылку из официальной документации о синглтоне в target-c: Создание экземпляра синглтона
Или вы можете использовать макрос Мэтта Галлахера (потому что это очень удобно использовать): Singleton macro

0 голосов
/ 15 сентября 2011

Это очень просто ..

В одном XIB вы можете добавить много просмотров правильно. Теперь добавьте два основных вида, таких как, скажем, представление данных и вид сбоку кнопки, в которые вы хотите войти. и все другие иерархии представлений, которые вы можете добавить в это представление данных.

0 голосов
/ 05 сентября 2011

Вы можете создать класс "DrawerView" и импортировать его туда, где вы захотите его использовать. Затем вы можете использовать presentModalViewController: myDrawer, чтобы он появился, когда вам это нужно. Надеюсь, что это имеет смысл.

...