Использование Utility flip в качестве меню для нескольких контроллеров - PullRequest
0 голосов
/ 29 сентября 2011

Итак, я довольно новичок в xcode и все еще пытаюсь выяснить, как все контроллеры работают вместе.В настоящее время я пишу приложение, которое имеет несколько экранов, как вы бы организовали с помощью TabController.Тем не менее, на самом деле на моем экране нет места для вкладки внизу.Оглядываясь на другие шаблоны, я нашел стартовый код утилиты.Мне очень нравится, как у него просто маленький я внизу, а затем переворачивается на совершенно другой контроллер.

Можно ли использовать flipController в качестве меню (с иконками, такими как домашний экран), и перевернутьвернуться к любому из нескольких контроллеров, основанных на том, что было нажато?Я знаю, что если это возможно, это будет связано с кодом в делегаторе, но до сих пор я не смог ничего найти в интернете, и мне не повезло с этим повозиться.

Любая помощь будет принята с благодарностью.

1 Ответ

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

Переключение UIViewControllers на нажатие кнопки?Да, я думаю, что iOS может быть способна на такой подвиг!

Беглый взгляд на шаблон для служебного приложения в XCode показывает три основных класса, делегат приложения, контроллер основного представления и контроллер представления с обратной стороны,В делегате приложения создается экземпляр корневого контроллера для окна, который устанавливается после завершения запуска приложения.Примерно так:

MyRootViewController *myvc = [[MyRootViewController alloc] initWithNibName:@"MyRootView" bundle:nil];
self.window.rootViewController = myvc;
[myvc release];

В MyRootViewController вы увидите метод, вероятно -(IBAction)showInfo:(id)sender, который создает и модально представляет контроллер представления с обратной стороны.Это сообщение отправляется нажатием кнопки, подключенной в файле .xib.

MyFlipsideViewController *mfvc = [[MyFlipsideViewController alloc] initWithNibName:@"MyFlipsideView" bundle:nil];
mfvc.delegate = self; // by setting the root view controller as the delegate, 
                      // your flipside controller can send messages to MyRootViewController
mfvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; // set how the controller's view should be displayed
[self presentModalViewController:mfvc animated:YES];
[mfvc release];

MyFlipSideViewController отображается, и его вид отображается на экране модально.

Чтобы переключиться назад, контроллер переворачивает отправляет своему делегату (MyRootViewController) сообщение -(IBAction)flipsideViewControllerDidFinish:(id)sender, информируя его о том, что он может перевернуть представление назад.В этом методе MyFlipsideViewController отклоняется.

Возможно, существует множество способов реализовать тип приложения, которое вы описываете (намного лучше, чем то, что я собираюсь описать), но если вы хотите имитировать утилитуШаблон приложения, вы можете сделать корневой контроллер представления, который действует как делегат для ряда других контроллеров представления.У него должен быть метод, подобный -showInfo:(id)sender, хотя было бы неплохо, если бы он мог показывать разные контроллеры в зависимости от нажатой кнопки.Один из способов сделать это - присвоить каждой кнопке определенный тег, а затем использовать switch, например, так:

MyFlipsideViewController *controller = nil;
switch ([sender tag]) {
    case 1:
        controller = [[MyFlipsideViewController alloc] initWithNibName:@"OneFlipsideView" bundle:nil];
        break;
    case 2:
        controller = [[MyFlipsideViewController alloc] initWithNibName:@"AnotherFlipsideView" bundle:nil];
        break;
    default:
        @throw [NSException exceptionWithName:@"Unrecognized object" 
                                       reason:@"I don't know how to handle a button with that tag." 
                                     userInfo:nil];
        break;
}
controller.delegate = self;
controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:controller animated:YES];
[controller release];

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

Перемещение между представлениями - это на самом деле хлеб в масле программирования для iOS.Я лично рекомендую Программирование на iOS: Руководство по ранчо для больших ботаников - думаю, его чтение даст вам очень четкое представление о паттерне MVC в программировании на iOS.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...