Переключение 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.
Я не эксперт,хотя (как может сказать любой, кто читает код выше), я бы сказал, что доверяйте мне.Особенно когда дело доходит до тех релизных звонков.