Как создать кнопку «Физическое меню» (например, в меню Android) в iPhone?
-
25-10-2019 - |
Вопрос
Я разрабатываю навигационное приложение в iPhone.
В котором я хочу создать кнопку «Физическое меню», как меню, например, в телефонах Android.
Меню можно получить из любого представления в иерархии.
У кого -нибудь есть идеи, как мы можем достичь этого.
Можем ли мы добавить ящик, подобный меню, в UinavigationBar?
Пожалуйста, не предлагайте TabBarController, так как это последний вариант.
Решение
Вы должны создать подкласс 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];
Другие советы
Я думаю, что то, что вы хотите, это просто установить TeatherView of UinaVigationItem на произвольный Uiview для обработки пользовательских кранов.
Это не обязательно должен быть текстовый ярлык :)
Если это так, то я бы предложил вам взять sharedInstance
С флагами отслеживает иерархию стека контроллера представления. Каждый раз, когда пользователь навигает, просто обновляйте свой sharedInstance
и сделайте пользовательскую подготовку меню и заполняйте его. Хорошей практикой будет повторное использование вашего компонента пользовательского интерфейса, а не сделать его новым при каждой навигационной операции.
Вы можете создать "DrawerView
"Класс и импортируйте его, где вы захотите его использовать. Тогда вы можете использовать presentModalViewController: myDrawer
Чтобы это появилось, когда вам это нужно. Надеюсь, это имеет смысл.
Это очень просто ..
В одном XIB вы можете добавить много просмотров правильно. Теперь добавьте два основных представления, такие как Say Data View и вниз по боковой кнопке. Просмотр, в котором вы хотите. (Если Mnt приведите 4 кнопки для навигации) теперь держите у вас этот вид вверху. и вся другая гирархия представлений, которые вы можете добавить в этот представление данных.
Я думаю, вы должны создать синглтон UIViewController
или же UIView
для этого. Преимущество UIViewController
это то, что он может быть представлен с presentModalViewController:animated:
Метод, а также, если вам нужно, вы можете подтолкнуть его к своему навигационному стеку. Также преимущество, что у вас есть UIView
экземпляр в то же время.
Используя шаблон Singleton, вы можете добраться до своего класса в любом месте.
Проверьте эту ссылку из официальной документации о Синглтоне в Objective-C: Создание экземпляра Синглтона
Или вы можете использовать макрос Мэтта Галлахера (потому что это очень удобно в использовании): Singleton Macro
Если вы можете получить бета -версию iOS 5, я очень рекомендую ее. Новый бета -выпуск Dev имеет расширение на 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
S.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];
При таком подходе (с использованием контроллеров представления ребенка) ваши представления и контроллер навигации получат необходимое предупреждение о памяти, просмотр загрузки и вызовы метода обработки вращения при необходимости.