Ответ 1
Apple рекомендует использовать performSegueWithIdentifier:sender:someObject
для программного выполнения сегментов. Есть несколько преимуществ для этого:
-
Меньше вашего собственного кода означает, что вы разрешаете инфраструктуре выполнять большую часть работы. Если Apple придумает какой-то сверхъестественный новый визуальный эффект для push segues или улучшит производительность или исправит ошибку в какой-то будущей версии iOS, ваше приложение сможет получить ее бесплатно. И каждая строка кода, которую вы пишете, чтобы работать с каркасом, могла бы сделать для вас, увеличивает вероятность написания ошибок.
-
Больше в IB может означать, что легче изменить. Если вы решите, что хотите изменить все свои нажатия на модальные сегменты или какой-то пользовательский тип segue, где вы делаете свой собственный супер-крутой визуальный эффект, вы можете выбрать "em all in IB" и изменить тип сегмента одним щелчком мыши вместо охоты в вашем коде.
Кроме того, используете ли вы первый или второй метод, нажатие контроллера представления для перехода "назад" на предыдущий контроллер представления не будет работать так, как ожидают ваши пользователи. Когда вы нажимаете SongViewController
, он добавляется в конец стека навигации:
LocationViewController -> SongViewController
Если вы снова нажмете LocationViewController
, чтобы вернуться назад:
LocationViewController -> SongViewController -> LocationViewController
Если пользователь нажимает кнопку "Назад" на панели навигации, они снова вернутся из представления местоположения в режим просмотра песни в окно местоположения. (Кроме того, если вы продолжаете делать это, каждый "назад" и "вперед" добавит к постоянно растущей цепочке контроллеров, что может привести к другим проблемам.)
Вместо этого вы должны вернуться к управлению контроллером навигации. Он помещает кнопку в навигационную панель для этой цели, которая должна обрабатывать большинство случаев использования. Если вам нужно сделать свой собственный контроль для возврата, вы не сможете сделать это в IB с iOS 5, но вы можете сделать это программно с помощью метода навигационного контроллера popViewControllerAnimated:
.