uiviewcontroller ios xcode

Интерфейс из комбинированных контроллеров видов

Вы можете использовать контроллеры видов, которые предоставляет UIKit сами по себе или в сочетании с другими контроллерами видов, создавая еще более сложные интерфейсы. При объединении контроллеров видов, важен порядок содержимого; действительны только определенные соглашения. Порядок содержания, от дочернего к родительскому, выглядит следующим образом:

  • Контент контроллеров вида, и контейнер контроллеров видов, которые имеют гибкие границы (например, Page View контроллер).
  • Навигационный контроллер.
  • Tab bar контроллер.
  • Split view контроллер.

Модальные контроллеры видов представляют собой прерывание, они следуют немного другим правилам. Вы можете представить практически любой вид контроллера модально в любое время. Это выглядит гораздо менее запутанным чтобы представить Tab Bar контроллер или контроллер навигации модально от пользовательского контроллера вида.

Добавление навигационного контроллера в Tab bar контроллер

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

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

Создание объектов, используя storyboard

Чтобы создать комбинированный интерфейс с тремя вкладками, которые содержат контроллеры пользовательских видов и одну вкладку, которая содержит контроллер навигации:

  1. Создайте три пользовательских контроллера вида и один навигационный контроллер.
  2. Выберите три Custom View контроллера и Navigation контроллер (только Navigation контроллер сцены, а не кореневой контроллер вида).
  3. Выберите Editor > Embed In > Tab Bar Controller.
  4. Отобразите Tab bar контроллер как контроллер первого вида, выбрав опцию Is Initial View Controller в инспекторе Атрибутов (или предствьте контроллер вида в пользовательском интерфейсе по-другому.)

Создание объектов программно

Если вы создаете комбинированный интерфейс с панелью вкладок и интерфейсом навигации программно для главного окна вашего приложения, наиболее подходящим местом для этого является метод applicationDidFinishLaunching: вашего делегата приложения. Следующие шаги объясняют, как создать комбинированный интерфейс, где три вкладки содержат пользовательские контроллеры видов и одна содержит контроллер навигации:

  1. Создайте UITabBarController объект.
  2. Создайте три пользовательских объекта кореневых контроллеров видов, по одному для каждой вкладки.
  3. Создайте дополнительный контроллер пользовательского вида, выступающего в качестве контроллера корневого вида для навигационного интерфейса.
  4. Создайте объект UINavigationController и инициализируйте его с его корневым контроллером вида.
  5. Добавьте контроллер навигации и три контроллера пользовательских видов в свойство viewControllers вашего контроллера панели вкладок.

Пример создания Tab Bar контроллера программно:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    self.tabBarController = [[UITabBarController alloc] init];
 
    MyViewController1* vc1 = [[MyViewController1 alloc] init];
    MyViewController2* vc2 = [[MyViewController2 alloc] init];
    MyViewController3* vc3 = [[MyViewController3 alloc] init];
    MyNavRootViewController* vc4 = [[MyNavRootViewController alloc] init];
    UINavigationController* navController = [[UINavigationController alloc]
                            initWithRootViewController:vc4];
 
    NSArray* controllers = [NSArray arrayWithObjects:vc1, vc2, vc3, navController, nil];
    tabBarController.viewControllers = controllers;
 
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    window.rootViewController = tabBarController;
    [window makeKeyAndVisible];
}

Отображение навигационного контроллера модально

Вполне разумно (и довольно часто) отобразить навигационные контроллеры модально от вашего приложения. На самом деле, многие из стандартных системных контроллеров видов (в том числе UIImagePickerController и ABPeoplePickerNavigationController) являются контроллерами навигации, которые специально разработаны, чтобы быть представлеными модально.

Если вы хотите представить свои собственные пользовательские навигационные интерфейсы модально, вы всегда передаете объект навигационного контроллера в качестве первого параметра в метод presentModalViewController:animated:. Вы всегда должны настраивать контроллер вида надлежащим образом, прежде чем выводить его. Как минимум, ваш контроллер навигации должен иметь корневой контроллер вида. И если вы хотите, чтобы пользователь начинал его использовать в другой точке навигационной иерархии, необходимо добавить эти контроллеры видов в стек навигации (без анимации), прежде чем представлять контроллер навигации.

Нижеприведенный листинг показывает пример, как создать и настроить контроллер навигации и показать его модально. В примере, контроллеры видов в стеке навигации являются пользовательскими объектами, которые вы должны определить и настроить с видом. Объект currentViewController является ссылкой на видимый в данный момент контроллер вида, который вы также должны предоставить.

MyViewController1*  rootVC = [[MyViewController1 alloc] init];
MyViewController2*  nextVC = [[MyViewController2 alloc] init];
NSArray * viewControllers = [NSArray arrayWithObjects:rootVC, nextVC, nil];
 
// Создаем контроллер вида и настраиваем виды
UINavigationController*  theNavController = [[UINavigationController alloc]
                          initWithRootViewController:rootVC];
[theNavController setViewControllers:viewControllers animated:NO];
 
// Отображаем модально навигационный контроллер.
[currentViewController presentModalViewController:theNavController animated:YES];

Отображение Tab Bar контроллера модально

Возможно (хотя и редко) представить, в вашем приложении, Tab Bar контроллер модально. Интерфейс панели вкладок, как правило, установлен в главном окне вашего приложения и обновляется только по мере необходимости. Однако, вы могли представить контроллер панели вкладок модально если дизайн вашего интерфейса, может оправдать это. Например, для переключения из первичного режима работы вашего приложения на совершенно иной режим, который использует интерфейс панели вкладок, вы можете представить вторичный контроллер панели вкладок модально с помощью перекрестного перехода.

При представлении Tab Bar контроллера модально, вы всегда передаете объект контроллера панели вкладок в качестве первого параметра в меиод presentModalViewController:animated:. Tab Bar контроллер должен быть настроен перед его использованием. Таким образом, необходимо создать кореневые контроллеры видов, настроить их, и добавить их в Tab Bar контроллер так же, как если бы вы установили интерфейс панели вкладок в главном окне.

Как и во всех других модально представленных контроллерах видов, родительский контроллер вида отвечает за закрытие его дочернего модально контроллера вида в ответ на соответствующее действие пользователя. При закрытии Tab bar контроллера, помните, что закрыв Tab bar контроллер, вы закрываете и контроллеры видов, связанные с каждой вкладкой.

Использование Table View контроллера в навигационном интерфейсе

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

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

Следующий листинг показывает пример, перехода на следующий уровень данных в интерфейсе навигации. Всякий раз, когда пользователь нажимает определенную строку в текущей таблице, можно использовать информацию, связанную с этой строкой, чтобы инициализировать новый контроллер вида, который затем вталкивается в стек навигации. Метод initWithTable:andDataAtIndexPath: является пользовательским методом, который вы должны реализовать сами; его работа заключается в том, чтобы получить объект данных для строки и использовать его для инициализации контроллера представления вида для следующего уровня.

// Реализуйте что-то подобное в вашем подклассе UITableViewController 
// или в объекте делегата, который вы используете для управления таблицей.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   // Создайте контроллер представления с названием, как его
   // навигационный заголовок.
   NSUInteger row = indexPath.row;
   if (row != NSNotFound)
   {
      // Создайте контроллер вида с
      // данными следующего уровня.
      MyViewController *viewController = [[MyViewController alloc]
                   initWithTable:tableView andDataAtIndexPath:indexPath];
      [[self navigationController] pushViewController:viewController
                   animated:YES];
   }
}
 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac