Альтернативные способы программно выдвигать контроллеры представления с раскадровкой - PullRequest
57 голосов
/ 28 января 2012

Я ищу альтернативные способы проталкивания контроллеров представления, программно созданных на раскадровке.На самом деле я нашел два способа, которые я использую для перехода к следующему представлению, но также и для возврата к предыдущему:

  1. с использованием pushViewController:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
    LocationWebView *lvc = [storyboard instantiateViewControllerWithIdentifier:@"LocationWebView"];
    [self.navigationController pushViewController:lvc animated:YES];
    
  2. программно Segue:

    [self performSegueWithIdentifier: @"SongSegue" sender: self];
    

Есть ли у вас какие-либо советы по поводу альтернатив и как лучше всего выполнить эту операцию?Обратите внимание, что я не имею в виду модальные виды.

Ответы [ 2 ]

36 голосов
/ 17 июня 2012

Apple рекомендует использовать performSegueWithIdentifier:sender:someObject для программного выполнения сегментов.Есть, по крайней мере, несколько преимуществ для этого:

  • Меньше вашего собственного кода означает, что вы позволяете платформе выполнять большую часть работы.Если Apple предложит какой-нибудь очень крутой новый визуальный эффект для push-сегментов, или улучшит производительность, или исправит ошибку в каком-либо будущем выпуске iOS, ваше приложение может получить его бесплатно.И каждая строка кода, которую вы пишете для выполнения работы, которую может сделать фреймворк, увеличивает ваши шансы на написание ошибок.

  • Больше в IB может означать, что легче изменить,Если вы решили, что хотите изменить все свои push-сегменты на модальные сегменты или какой-то другой тип сегмента, в котором вы создаете свой собственный супер-крутой визуальный эффект, вы можете выбрать их все в IB и изменить тип сегмента одним щелчком мыши вместо поискав вашем коде.


Кроме того, используете ли вы первый или второй метод, подталкивая контроллер представления, чтобы «вернуться» к предыдущему контроллеру представления, выиграл »работать так, как ожидают ваши пользователи.Когда вы нажимаете SongViewController, он добавляется в конец стека навигации:

LocationViewController -> SongViewController

Если вы снова нажимаете LocationViewController, чтобы вернуться «назад»:

LocationViewController -> SongViewController -> LocationViewController

Если пользователь коснется кнопки «Назад» на панели навигации, он снова перейдет от просмотра местоположения к представлению песни и представлению местоположения.(Кроме того, если вы продолжите делать это, каждый «назад» и «вперед» добавит к постоянно увеличивающейся цепочке контроллеров представления, что может привести к другим проблемам.)

Вместо этого вы должны разрешить навигациюручка контроллера возвращается назад.Для этого он вставляет кнопку в панель навигации, которая должна обрабатывать большинство случаев использования.Если вам нужно сделать свой собственный контроль, чтобы вернуться, вы не можете сделать это в IB с iOS 5, но вы можете сделать это программно с помощью метода popViewControllerAnimated: контроллера навигации.

4 голосов
/ 15 мая 2012

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

Когда я использую представление, которое находится под UITabBarController, я использую следующий код для перехода на другую вкладку:

NSUInteger tabIndex = 2; // Index of the tab I want to select
UIViewController * viewCtrl = [_tabController.viewControllers objectAtIndex:tabIndex];
_tabController.selectedViewController = viewCtrl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...