Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Приложения tabbed используются в iOS для поддержки пользовательских интерфейсов, в которых доступ к нескольким экранам не выполняется в определенном порядке. Благодаря классу UITabBarController приложения могут легко включать поддержку таких сценариев с несколькими экранами. UITabBarController обеспечивает управление несколькими экранами, что позволяет разработчику приложений сосредоточиться на деталях каждого экрана.
Как правило, приложения с вкладками создаются с UITabBarController основным RootViewController окном. Однако при использовании дополнительного кода приложения табуляции также можно использовать в последовательности для другого начального экрана, например сценария, в котором приложение сначала представляет экран входа, а затем — интерфейс табуляции.
На этой странице рассматриваются оба сценария: когда вкладки находятся в корне иерархии представления приложения, а также в сценарии, отличномRootViewController от сценария.
Знакомство с UITabBarController
Поддержка UITabBarController разработки приложений с вкладками по следующим параметрам:
- Разрешение добавления в него нескольких контроллеров.
- Предоставление пользовательского интерфейса с вкладками через
UITabBarкласс, чтобы разрешить пользователю переключаться между контроллерами и их представлениями.
Контроллеры добавляются в UITabBarController его ViewControllers свойство, которое является массивом UIViewController . Сам UITabBarController по себе обрабатывает загрузку соответствующего контроллера и представление на основе выбранной вкладки.
Вкладки — это экземпляры UITabBarItem класса, которые содержатся в экземпляре UITabBar . Каждый UITabBar экземпляр доступен через TabBarItem свойство контроллера на каждой вкладке.
Чтобы понять, как работать с ним UITabBarController, давайте рассмотрим создание простого приложения, использующего его.
Пошаговое руководство по приложению tabbed
В этом пошаговом руководстве мы создадим следующее приложение:
Хотя шаблон приложения с вкладками уже доступен в Visual Studio для Mac, в этом примере эти инструкции работают из пустого проекта, чтобы лучше понять, как создается приложение.
Создание приложения
Начните с создания нового приложения.
Выберите пункт меню "Создать > решение" > в Visual Studio для Mac и выберите шаблон пустого проекта приложения > iOS>, назовите проектTabbedApplication, как показано ниже:
Добавление UITabBarController
Затем добавьте пустой класс, выбрав "Создать файл>" и выбрав шаблон "Общий: пустой класс". Назовите файл TabController , как показано ниже:
Класс TabController будет содержать реализацию UITabBarController массива UIViewControllers. Когда пользователь выбирает вкладку, UITabBarController он будет заботиться о представлении соответствующего контроллера представления.
Чтобы реализовать необходимые UITabBarController действия, выполните следующие действия.
- Задайте для базового класса
TabControllerUITabBarControllerзначение . - Создание
UIViewControllerэкземпляров для добавления в объектTabController. UIViewControllerДобавьте экземпляры в массив, назначенныйViewControllersсвойству объектаTabController.
Добавьте следующий код в TabController класс, чтобы выполнить следующие действия:
using System;
using UIKit;
namespace TabbedApplication {
public class TabController : UITabBarController {
UIViewController tab1, tab2, tab3;
public TabController ()
{
tab1 = new UIViewController();
tab1.Title = "Green";
tab1.View.BackgroundColor = UIColor.Green;
tab2 = new UIViewController();
tab2.Title = "Orange";
tab2.View.BackgroundColor = UIColor.Orange;
tab3 = new UIViewController();
tab3.Title = "Red";
tab3.View.BackgroundColor = UIColor.Red;
var tabs = new UIViewController[] {
tab1, tab2, tab3
};
ViewControllers = tabs;
}
}
}
Обратите внимание, что для каждого UIViewController экземпляра UIViewControllerмы устанавливаем Title свойство . Когда контроллеры добавляются UITabBarControllerв него, UITabBarController будут считываться Title для каждого контроллера и отображать его на метках связанной вкладки, как показано ниже:
Задание TabController в качестве RootViewController
Порядок размещения контроллеров на вкладках соответствует порядку их добавления в ViewControllers массив.
Чтобы загрузить UITabController его в качестве первого экрана, необходимо сделать его окно RootViewController, как показано в следующем коде для AppDelegate:
[Register ("AppDelegate")]
public partial class AppDelegate : UIApplicationDelegate
{
UIWindow window;
TabController tabController;
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
window = new UIWindow (UIScreen.MainScreen.Bounds);
tabController = new TabController ();
window.RootViewController = tabController;
window.MakeKeyAndVisible ();
return true;
}
}
Если мы запустите приложение сейчас, будет загружена первая вкладка, UITabBarController выбранная по умолчанию. Выбор любой из других вкладок приводит к отображению UITabBarController, представления связанного контроллера, как показано ниже, где конечный пользователь выбрал вторую вкладку:

Изменение tabBarItems
Теперь, когда у нас есть запущенное приложение табуляции, давайте изменим TabBarItem изображение и текст, отображаемый, а также добавьте значок на одну из вкладок.
Настройка системного элемента
Сначала давайте задали первую вкладку для использования системного элемента. В конструкторе удалите TabControllerстроку, которая задает контроллер Title для tab1 экземпляра и замените его следующим кодом, чтобы задать свойство контроллера TabBarItem :
tab1.TabBarItem = new UITabBarItem (UITabBarSystemItem.Favorites, 0);
При создании с помощью заголовка UITabBarItem и изображения автоматически предоставляются iOS, как показано на снимке экрана ниже с значком избранного и заголовком на первой вкладке:UITabBarSystemItem

Настройка образа
Помимо использования системного элемента, заголовок и изображение можно UITabBarItem задать для пользовательских значений. Например, измените код, который задает TabBarItem свойство контроллера tab2 следующим образом:
tab2 = new UIViewController ();
tab2.TabBarItem = new UITabBarItem ();
tab2.TabBarItem.Image = UIImage.FromFile ("second.png");
tab2.TabBarItem.Title = "Second";
tab2.View.BackgroundColor = UIColor.Orange;
Приведенный выше код предполагает, что имя second.png изображения было добавлено в корень проекта (или каталог Resources ). Для поддержки всех плотностей экрана вам потребуется три изображения, как показано ниже:

Рекомендуемый размер зависит от стиля изображения (циклический, квадратный, широкий или высокий).
Свойство Image должно быть задано только для имени файла second.png , iOS автоматически загружает файлы с более высоким разрешением при необходимости. Дополнительные сведения см. в руководствах по работе с изображениями . По умолчанию элементы панели вкладок серые, с синим цветом при выборе.
Переопределение заголовка
Title Если свойство задано непосредственно на TabBarItemконтроллере, оно переопределит любое значение, Title заданное для самого контроллера.
На следующем снимке экрана показана вторая (средняя) вкладка с пользовательским заголовком и изображением:

Задание значения индикатора событий
Вкладка также может отображать значок. Например, добавьте следующую строку кода, чтобы задать значок на третьей вкладке:
tab3.TabBarItem.BadgeValue = "Hi";
При выполнении это приведет к красной метке со строкой "Привет" в левом верхнем углу вкладки, как показано ниже:

Эмблема часто используется для отображения непрочитанных и новых элементов с указанием числа. Чтобы удалить значок, задайте BadgeValue значение NULL, как показано ниже:
tab3.TabBarItem.BadgeValue = null;
Вкладки в сценариях, отличных от RootViewController
В приведенном выше примере показано, как работать с UITabBarController RootViewController окном. В этом примере мы рассмотрим, как использовать то, когда оно не RootViewController является и показывает, как это создается с помощью UITabBarController раскадровки.
Пример начального экрана
В этом сценарии начальный экран загружается с контроллера, который не UITabBarControllerявляется. Когда пользователь взаимодействует с экраном, нажав кнопку, тот же контроллер представления будет загружен в UITabBarControllerобъект, который затем будет представлен пользователю. На следующем снимке экрана показана блок-схема приложения.
Давайте начнем новое приложение для этого примера. Опять же, мы будем использовать шаблон пустого проекта iPhone > ( > C#), на этот раз именовав проект InitialScreenDemo.
В этом примере раскадровка используется для размещения контроллеров представления. Чтобы добавить раскадровку, выполните приведенные действия.
Щелкните правой кнопкой мыши имя проекта и выберите "Добавить > новый файл".
Когда появится диалоговое окно "Создать файл", перейдите к iOS > Empty iPhone Storyboard.
Давайте вызовем этот новый раскадровки MainStoryboard , как показано ниже:
При добавлении раскадровки в ранее не раскадровки, которые описаны в руководстве "Введение в раскадровки". К ним относятся:
Добавьте имя раскадровки в раздел "Основной интерфейс" в разделе
Info.plist:App DelegateПереопределите метод Window в следующем коде:public override UIWindow Window { get; set; }
Для этого примера нам потребуется три контроллера представления. Один из них ViewController1будет использоваться в качестве контроллера начального представления и на первой вкладке. Остальные два, именованные ViewController2 и ViewController3, которые будут использоваться на второй и третьей вкладках соответственно.
Откройте конструктор, дважды щелкнув файл MainStoryboard.storyboard и перетащите три контроллера представления в область конструктора. Мы хотим, чтобы каждый из этих контроллеров представления должен иметь собственный класс, соответствующий имени выше, поэтому в разделе "Класс удостоверений>" введите его имя, как показано на снимке экрана ниже:
Visual Studio для Mac автоматически создаст необходимые классы и файлы конструктора, это можно увидеть на панели решения, как показано ниже:
Создание пользовательского интерфейса
Затем мы создадим простой пользовательский интерфейс для каждого представления ViewController с помощью конструктора Xamarin iOS.
Мы хотим перетащить объект Label в Button ViewController1 из ToolBox справа. Далее мы будем использовать панель свойств для изменения имени и текста элементов управления следующим образом:
- Метка :
Text= Один - Кнопка :
Title= пользователь принимает некоторое начальное действие
Мы будем контролировать видимость нашей кнопки в TouchUpInside событии, и нам нужно ссылаться на нее в коде. Давайте определим его с именем aButton на панели свойств, как показано на следующем снимке экрана:
Теперь поверхность конструктора должна выглядеть примерно так, как на снимок экрана ниже:
Давайте добавим более подробную информацию ViewController2 ViewController3и , добавив метку к каждому, и измените текст на "Два" и "Три" соответственно. Это выделяет пользователя, на какой вкладке или представлении мы смотрим.
Подключение кнопки
Мы собираемся загрузить ViewController1 при первом запуске приложения. Когда пользователь нажимает кнопку, мы скроем кнопку и загрузим UITabBarController ViewController1 экземпляр на первой вкладке.
Когда пользователь освобождает aButtonсобытие TouchUpInside, необходимо активировать событие TouchUpInside. Давайте нажимаем кнопку и на вкладке "События" панели "Свойства" объявите обработчик событий , InitialActionCompleted чтобы его можно было ссылаться в коде. Это показано на снимке экрана ниже:
Теперь необходимо сообщить контроллеру представления, чтобы скрыть кнопку при срабатывании InitialActionCompletedсобытия. Добавьте ViewController1следующий частичный метод:
partial void InitialActionCompleted (UIButton sender)
{
aButton.Hidden = true;
}
Сохраните файл и запустите приложение. Появится экран, и кнопка исчезнет на сенсорном экране.
Добавление контроллера панели вкладок
Теперь у нас есть наше начальное представление, как ожидалось. Далее мы хотим добавить его в UITabBarController, а также представления 2 и 3. Давайте открываем раскадровки в конструкторе.
На панели элементов найдите контроллер панели вкладок в разделе "Контроллеры и объекты" и перетащите его в область конструктора. Как видно на снимке экрана ниже, контроллер панели вкладок меньше пользовательского интерфейса и поэтому содержит два контроллера представления по умолчанию:
Удалите эти новые контроллеры представления, выбрав черную панель в нижней части и нажав клавишу DELETE.
В раскадровки можно использовать segues для обработки переходов между TabBarController и нашими контроллерами представления. После взаимодействия с начальным представлением мы хотим загрузить его в tabBarController, представленный пользователю. Давайте настроим эту настройку в конструкторе.
Ctrl-Click and Drag from the button to the TabBarController. В контекстном меню появится контекстное меню. Мы хотим использовать модальное продолжение.
Чтобы настроить каждую из наших вкладок, ctrl-click из tabBarController к каждому из наших контроллеров представления в порядке от одного до трех, и выберите вкладку "Связь" в контекстном меню, как показано ниже:
Раскадровка должна выглядеть следующим образом:
Если щелкнуть один из элементов панели вкладок и просмотреть панель свойств, можно увидеть ряд различных параметров, как показано ниже:
Это можно использовать для изменения определенных атрибутов, таких как эмблема, заголовок и идентификатор iOS, среди прочего.
Если сохранить и запустить приложение сейчас, мы найдем, что кнопка снова появится при загрузке экземпляра ViewController1 в tabBarController. Давайте исправим это, проверив, есть ли в текущем представлении родительский контроллер представления. Если это так, мы знаем, что мы внутри TabBarController, и поэтому кнопка должна быть скрыта. Давайте добавим приведенный ниже код в класс ViewController1:
public override void ViewDidLoad ()
{
if (ParentViewController != null){
aButton.Hidden = true;
}
}
Когда приложение запускается и пользователь нажимает кнопку на первом экране, пользовательский интерфейсTabBarController загружается с первого экрана, размещенного на первой вкладке, как показано ниже:
Итоги
В этой статье описано, как использовать UITabBarController приложение. Мы пошаговые инструкции по загрузке контроллеров на каждой вкладке, а также настройке свойств на вкладках, таких как название, изображение и эмблема. Затем мы рассмотрели, используя раскадровки, как загрузить UITabBarController во время выполнения, когда оно не является окном RootViewController .
















