Переключение между контроллерами вида с помощью метода действия внутри текущего контроллера вида - PullRequest
0 голосов
/ 12 декабря 2011

Моя ситуация такова, что у меня есть контроллер основного вида (UIViewController в PrimaryViewController.h .m), который содержит UIButton.При нажатии отображается второй контроллер вида (UINavigationController), общая идея состоит в том, чтобы нажать кнопку «настройки» и открыть навигационное представление и позволить пользователю изменить свои настройки.

Iбыл в состоянии сделать это, но я не совсем уверен в моем методе.Внутри контроллера основного вида я добавил контроллер навигации и связал его как розетку внутри основного контроллера.Затем при нажатии кнопки вызывается функция showSettings:

- (IBAction)showSettings {
    [self presentModalViewController:navigationViewController animated:YES];
}

Аналогичным образом вызывается hideSettings для закрытия.Хотя это работает, я не уверен, что сделал это наилучшим или правильным способом.Ранее я пытался создать Navigation Controller в MainWindow.xib и связать его с App Delegate, однако столкнулся с проблемой, когда мне нужно было вызвать / отобразить этот контроллер в файле реализации PrimaryViewController.m и не смог сработатькак это сделать (то есть как выполнить [super addSubview:]; вне класса App Delegate).

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

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 12 декабря 2011

Вот что я бы сделал: 1. Создайте отдельный файл класса для контроллера навигации. Скажем, назовите это MyNavigateController. Вы можете добавить это в свой YourAppAppDelegate. MyNavigateController.h выглядит следующим образом:

@interface MyNavigateController : UIViewController 
{
    UINavigationController *navController;
}
@property (nonatomic, retain) IBOutlet UINavigationController *navController;
@end

MyNavigateController.m выглядит следующим образом для метода viewDidLoad:

- (void)viewDidLoad
{
[self.view addSubview:self.navController.view];
}

Для MyNavigateController.xib используйте перетаскивание объекта контроллера навигации и назначьте его вашему классу PrimaryViewController.

В вашем классе PrimaryViewController

- (IBAction)showSettings {
    ChildViewController *childViewController = [ChildViewController alloc]initWithNibName:@"ChildViewController" bundle:nil];
//childViewController.ivarsifany = ....  //optionaly assign values to ivars etc.
    [self.navigationController pushViewController:childViewController
                                         animated:YES];
}
0 голосов
/ 13 декабря 2011

Если вашей единственной проблемой является конкретная анимация перехода для presentModalViewController:, то вы можете просто изменить тип перехода.Существует несколько различных анимаций перехода, например:

- (IBAction)showSettings {
    [navigationViewController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
    [self presentModalViewController:navigationViewController animated:YES];
}

. Существует несколько стилей перехода, например UIModalTransitionStyleCoverVertical, UIModalTransitionStyleCrossDissolve и UIModalTransitionStylePartialCurl.

.
0 голосов
/ 12 декабря 2011

Yo,

В главе 6 «Начальная разработка iPhone» есть хороший пример переключения представлений.Вы можете увидеть исходный код для этого здесь: http://iphonedevbook.com/

Или проверить это сообщение

Приветствия

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