1. Начало работы
Если вы следовали первой части этого руководства, то, вероятно, уже знаете, что процесс установки Xamarin не слишком сложен. Xamarin создал очень хороший установщик, который выполняет большую часть проверки требований для вас, и вам просто нужно установить несколько флажков и нажать Далее . Хотя процесс запуска и запуска Xamarin.iOS очень похож, в зависимости от того, на какой платформе вы разрабатываете: OS X или Windows, будет несколько отличий.
контрольный список
Вы быстро обнаружите, что процесс создания приложений iOS в C # немного более сложен, чем процесс Android. Не потому, что SDK сложнее понять, но есть еще несколько движущихся частей. Чтобы завершить это руководство и успешно создавать приложения для iOS на C #, вам понадобится следующее:
- Mac, независимо от того, используете ли вы Visual Studio на ПК
- Xcode
- последний iOS SDK
- последний Xamarin.iOS SDK
- учетная запись разработчика Apple
- ПК, если вы хотите разрабатывать с использованием Visual Studio
Если вы приехали из мира Windows, вы можете быть немного расстроены тем фактом, что вам нужны Mac и Xcode. Реальность такова, что независимо от того, какие инструменты и языки вы используете для создания приложения iOS, только Xcode имеет возможность создавать окончательный дистрибутив iOS (.ipa), а Xcode работает только на Mac. Поверьте мне, чем раньше вы это примете, тем скорее вы будете наслаждаться остальным процессом.
2. Установка
Если вы ознакомились с первой частью этого руководства, то вы, вероятно, уже достаточно хорошо разбираетесь в процессе установки Xamarin . Шаги, необходимые для установки Xamarin.iOS, аналогичны действиям Xamarin.Android. Но если вы не читали предыдущий учебник, то в следующем разделе будут описаны все необходимые шаги.
Шаг 1: Xcode и iOS SDK
Независимо от того, на какой платформе вы собираетесь разрабатывать, вам понадобится последняя версия Xcode и iOS SDK. Основная причина, по которой вам понадобится Xcode, — процесс сборки.
Сначала зайдите в iOS Dev Center и создайте учетную запись, если у вас ее еще нет. Вы можете пропустить этот шаг и перейти прямо в Mac App Store, чтобы загрузить XCode, но если вы планируете запускать свое приложение на физическом устройстве, вам все равно понадобится учетная запись разработчика, так что вы можете сделать это сейчас.
После создания войдите в систему и перейдите на страницу загрузок, чтобы получить последнюю версию XCode. Вы попадете в Mac App Store, чтобы завершить процесс загрузки и установки. Это даст вам не только последнюю версию Xcode, но также загрузит и установит последнюю версию iOS SDK. Сладкий.
В этом руководстве не будет подробно описываться процесс подготовки и развертывания приложения на устройстве. Есть другие статьи на Tuts +, которые охватывают эту тему, а также документацию на веб-сайте Xamarin, если вы хотите это сделать.
Шаг 2: Xamarin.iOS и Xamarin Studio
Вы можете убить двух зайцев одним выстрелом, зайдя на страницу загрузки Xamarin , создав учетную запись, если у вас ее еще нет, и нажав Download Xamarin . Это загрузит установщик Xamarin , который позаботится обо всех необходимых проверках, загрузке и установке. Дважды щелкните файл .dmg, чтобы начать установку.
После запуска установщика вы можете выбрать компоненты, которые вы хотите установить. Для этого урока вам понадобится только вариант Xamarin.iOS, но вы можете установить столько, сколько захотите.
Этот экран может немного отличаться на вашей машине в зависимости от операционной системы, которую вы используете, а также от того, какие продукты вы можете устанавливать, а какие нет. Как упоминалось ранее, вам все равно нужно будет завершить этот процесс на Mac, если вы занимаетесь разработкой на ПК. Частью установки Xamarin.iOS является Xamarin Build Host, который позволяет вам подключаться к вашему Mac по сети с ПК и создавать пакет .ipa , который работает на iOS Simulator или на физическом устройстве.
После того как все пакеты были загружены и установлены, если вы занимаетесь разработкой на Mac, вы можете запустить Xamarin Studio. Если вы собираетесь заниматься разработкой на ПК, вам нужно будет выполнить тот же процесс установки, чтобы получить все необходимые биты Xamarin.iOS, а также плагин Xamarin для Visual Studio на вашем компьютере с Windows.
Для этого вам понадобится хотя бы версия Business Edition Xamarin . Вы можете получить все необходимое через 30-дневную бесплатную пробную версию Xamarin, если у вас его еще нет. Если у вас нет доступа к бесплатной пробной версии или полному программному обеспечению, вам нужно будет использовать Xamarin Studio на вашем Mac.
3. Создание простого приложения
Лучший способ по-настоящему изучить новые технологии любого рода — это покопаться и создать что-то с нуля. Вы можете создать это приложение в любой среде IDE (интегрированная среда разработки), все, что вам нужно сделать, это следовать примеру кода.
В современную эпоху разработки под iOS у вас есть три варианта создания пользовательского интерфейса вашего приложения.
- создавать отдельные представления и связывать их вместе в коде
- использовать раскадровки, которые являются более графической версией первого варианта
- создать пользовательский интерфейс в коде
В то время как первый и второй варианты являются более популярными, мы собираемся создать пример приложения, используя третий вариант. Важно не только понять, как это сделать, но и понять, почему были созданы графические инструменты.
Шаг 1. Использование Visual Studio в Windows
Если вы используете Visual Studio на компьютере Windows, чтобы следовать этому руководству, при запуске процесса создания проекта вы увидите диалоговое окно с просьбой подключиться к Xamarin Build Host . Это довольно простой процесс, когда вам нужно только следовать указаниям на экранах. Это будет выглядеть примерно так.
Первое диалоговое окно, которое вы увидите, — это учебное окно, в котором описано, как запустить Xamarin Build Host на вашем Mac с помощью Spotlight .
На вашем Mac откройте Xamarin Build Host и нажмите кнопку « Пара» . Это даст вам PIN-код .
Вернитесь в Visual Studio и нажмите « Продолжить». кнопка. Если ваш Mac настроен правильно, он должен появиться в списке как возможный Xamarin Сборка Хостов .
Нажмите на выбранную вами систему Xamarin Build Host и выберите Connect .
Visual Studio запросит PIN-код . После того, как вы ввели ПИН-код и соединили Visual Studio с вашим Xamarin Build Host , вы сможете следовать вместе с остальной частью этого руководства, не только писать приложение для iOS на C #, но и делать это с помощью Visual Studio. Потрясающие.
Если вам когда-нибудь понадобится подключить этот конкретный Xamarin Build Host к другой системе, вы можете нажать кнопку Unpair . После этого вам придется повторить процесс для новой системы.
К счастью, Visual Studio запомнит хост сборки Xamarin, с которым вы ранее были связаны. Если вы расстроены Visual Studio с хоста сборки Xamarin , в следующий раз, когда вы попытаетесь написать приложение iOS в Visual Studio, он запросит PIN-код для того же хоста сборки. Чтобы найти другой хост в Visual Studio, нажмите « Параметры» в меню « Сервис» и выберите « Xamarin»> «Настройки iOS» . Там вы найдете кнопку с надписью Find Mac Build Host . Откроется диалоговое окно для выбора другого хоста сборки Xamarin .
Шаг 2: Создание проекта
Для начала откройте выбранную среду IDE и выберите « Файл»> «Создать»> «Решение» или « Проект» в зависимости от используемой среды IDE. В диалоговом окне « Новое решение » выберите « C #»> «iOS»> «iPhone» в виде дерева и выберите « Пустой проект» в качестве шаблона. Это даст вам базовую структуру для вашего приложения без всяких наворотов на вашем пути. Вот как это будет выглядеть в Xamarin Studio 5.0.
Вы можете дать своему решению любое имя, какое захотите, но если вы заинтересованы в том, чтобы подписаться вместе со мной, назовите его Feeder. Как только структура решения / проекта будет создана, вы увидите несколько файлов, которые стоит увеличить:
- AppDelegate.cs
- Entitlements.plist
- Info.plist
- Main.cs
AppDelegate.cs
В мире iOS AppDelegate
является проводником вашего приложения с устройства. Он используется для обработки любых системных событий, которые необходимы. Делегат приложения также сохраняет ссылку на объект window
. Каждое приложение iOS имеет окно, экземпляр класса UIWindow
, который используется для рисования пользовательского интерфейса приложения. AppDelegate
отвечает за подписку на любые системные события, относящиеся к вашему приложению, например, когда приложение завершает запуск или когда оно завершается операционной системой.
Entitlements.plist
Этот файл похож на раздел разрешений AndroidManifest. Он определяет разрешения, которые имеет приложение, а также технологии, которые ему разрешено использовать. Некоторые из наиболее распространенных технологий включают iCloud, PassKit, Push-уведомления и т. Д. Файл plist или список свойств можно рассматривать как словарь пар ключ-значение, в которых хранятся свойства, используемые вашим приложением.
Info.plist
Как и в файле Entitlements.plist, в файле Info.plist хранятся пары ключ-значение. Разница в том, что в этом файле хранится информация о приложении, такая как имя приложения, значки, изображения запуска и т. Д.
Main.cs
Этот файл содержит основную точку входа для вашего приложения. Метод Main
создает новое приложение Xamarin.iOS и указывает AppDelegate
который будет обрабатывать события, отправляемые операционной системой.
Шаг 3: Создание модели
Первым шагом в создании примера приложения является наличие объекта, в котором хранится информация, которую вы хотите отобразить пользователю. В этом случае вы хотите хранить информацию о статьях, которые появляются в блоге Xamarin RSS . Вы можете хранить больше данных, чем в примере, но это поможет вам начать. Сначала создайте новый класс и назовите его RssItem
. Определение класса должно выглядеть так:
1
2
3
4
5
6
7
|
public class RssItem
{
public string Title { get;
public string Creator { get;
public DateTime PubDate { get;
public string Link { get;
}
|
Класс довольно прост:
-
Title
, строка, представляющая название статьи -
Creator
, строка, представляющая автора статьи -
PubDate
,DateTime
представляющий дату публикации статьи -
Link
, строка, представляющая прямую ссылку на статью
С помощью этого простого набора моделей мы можем теперь переключить наше внимание на пользовательский интерфейс приложения и реализацию ядра.
Шаг 4: Модель-Вид-Контроллер
При создании приложений iOS у вас нет выбора, кроме как следовать парадигме Model-View-Controller . Даже если вы не понимаете, что это такое, к концу процесса вы будете солдатом MVC, подключающимся к приложениям iOS, даже не задумываясь об этом. На высоком уровне шаблон MVC состоит из, как вы уже догадались, трех частей:
модель
Вы можете рассматривать модель в шаблоне MVC как основные компоненты (или классы) в вашем приложении, которые содержат важные бизнес-данные / логику. В вашем случае модель — это класс RssItem
который вы только что создали.
Посмотреть
Представление в вашем приложении — это фактическое визуальное представление данных (или вашей модели) на устройстве. Это может быть в форме списка данных или некоторых пользовательских компонентов, представляющих данные, найденные в вашей модели .
В этом примере слой представления будет состоять из списка объектов RssItem
, которые были загружены из вышеупомянутого канала. В идеале Модель и Представление не знают друг друга и не должны взаимодействовать напрямую. Две части головоломки должны быть скреплены каким-то клеем.
контроллер
Клей, связывающий модель и вид , — это контроллер . В мире разработки под iOS вы обычно видите контроллер в виде класса или подкласса ViewController
. Этот класс предназначен для управления взаимодействием между моделью и представлением . Взаимодействие может происходить в виде того, что пользователь прикасается к некоторому фрагменту представления и обновляет модель на основе этого взаимодействия или к некоторому фрагменту модели, который обновляется другим закулисным процессом, и обновляет представление на основе этого изменения.
Для реализации шаблона MVC в вашем приложении вам необходимо создать View и Controller . Добавьте новый элемент в свой проект, щелкнув правой кнопкой мыши на своем проекте и выбрав Add> New File (или Item в зависимости от вашей IDE). В диалоговом окне « Новый файл» вам необходимо выбрать группу iOS и iPhone View Controller в качестве типа и присвоить ему имя FeedItem
.
Этот процесс собирается добавить новые файлы в ваш проект. Все эти файлы служат разным целям, но вместе они создадут ваше представление списка, которое представит пользователю статьи блога Xamarin .
FeedItemCell.cs
FeedItemCell
— это класс, который описывает отдельные ячейки (или строки) в вашем списке. Этот класс позволит вам изменить внешний вид и макет, а также функциональность всех ячеек в списке, чтобы придать ему индивидуальный вид.
FeedItemSource.cs
Источник данных, которые визуализируются в вашем списке объектов FeedItemCell
представлен в форме класса FeedItemSource
. Этот исходный класс не только содержит данные, которые будут отображаться в вашем списке, но также содержит информацию о списке, включая его группировки, верхние и нижние колонтитулы и количество элементов. Он также обрабатывает взаимодействия с элементами, когда пользователь касается одного из них.
FeedItemController.cs
Еще раз, фактический контроллер — это клей, который связывает все вещи вместе. Класс FeedItemController
— это контейнерный класс, который создаст представление списка для реального просмотра на экране пользователем. В этом классе вам необходимо получить соответствующие данные для отображения на экране, инициализировать новый FeedItemSource
с FeedItemSource
данными и передать источник в контроллер.
Шаг 5: приступим к кодированию
Теперь, когда у вас есть все кусочки головоломки, пришло время собрать их вместе. Давайте начнем работать с тремя файлами, которые вы только что создали, и подготовим их для наших данных. Сначала взгляните на класс FeedItemCell
и измените его так, чтобы он выглядел следующим образом.
01
02
03
04
05
06
07
08
09
10
11
12
13
|
namespace Feeder
{
public class FeedItemCell : UITableViewCell
{
public static readonly NSString Key = new NSString («FeedItemCell»);
public FeedItemCell () : base (UITableViewCellStyle.Subtitle, Key)
{
// TODO: add subviews to the ContentView, set various colors, etc.
TextLabel.Text = «TextLabel»;
}
}
}
|
В этом классе мало что происходит, и вы внесете лишь небольшое изменение. Этот класс собирается наследовать от UITableViewCell
. Весь этот класс содержит конструктор, который вызывает базовый конструктор, передавая две части данных.
- Первый стиль ячейки. В этом примере мы используем встроенный стиль, известный как стиль
Subtitle
. Этот стиль допускает два текстовых поля в ячейке, одно поверх другого. - Вторым параметром базового конструктора является ключ, который будет представлять этот тип ячейки в списке. В этом случае на каждую ячейку в списке будет ссылаться ключ
FeedItemCell
.
Следующим элементом головоломки является класс FeedItemSource
. Замените содержимое реализации по умолчанию следующим:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
namespace Feeder
{
public class FeedItemSource : UITableViewSource
{
private List<RssItem> _items;
public FeedItemSource (List<RssItem> items)
{
_items = items;
}
public override int NumberOfSections (UITableView tableView)
{
// TODO: return the actual number of sections
return 1;
}
public override int RowsInSection (UITableView tableview, int section)
{
// TODO: return the actual number of items in the section
return _items.Count;
}
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
var cell = tableView.DequeueReusableCell (FeedItemCell.Key) as FeedItemCell;
if (cell == null)
cell = new FeedItemCell ();
// TODO: populate the cell with the appropriate data based on the indexPath
cell.TextLabel.Text = _items[indexPath.Row].Title;
cell.DetailTextLabel.Text = string.Format («{0} on {1}», _items [indexPath.Row].Creator, _items [indexPath.Row].PubDate);
return cell;
}
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
var item = _items [indexPath.Row];
var url = new NSUrl (item.Link);
UIApplication.SharedApplication.OpenUrl (url);
}
}
}
|
Давайте разберемся, чтобы лучше понять, что происходит. Источнику нужны данные, которые будут отображаться в списке и которые обычно обрабатываются в конструкторе.
1
2
3
4
5
6
|
private List<RssItem> _items;
public FeedItemSource (List<RssItem> items)
{
_items = items;
}
|
Исходные данные в вашем списке будут предоставлены списком классов вашей модели, RssItem
. Этот список элементов передается в конструктор класса FeedItemSource
и _items
в закрытой переменной _items
.
1
2
3
4
5
|
public override int NumberOfSections (UITableView tableView)
{
// TODO: return the actual number of sections
return 1;
}
|
При использовании списков в приложении для iOS у вас есть возможность группировать ячейки по разделам. Метод NumberOfSections
возвращает количество разделов или групп, найденных в списке. В этом конкретном приложении есть одна группа, которая содержит все элементы, что означает, что метод возвращает 1
.
1
2
3
4
5
|
public override int RowsInSection (UITableView tableview, int section)
{
// TODO: return the actual number of items in the section
return _items.Count;
}
|
С определенным количеством разделов в списке табличное представление должно знать, сколько элементов найдено в каждом разделе. Вы уже передали список объектов RssItem
, которые должны появиться в списке, в конструктор и сохранили его в закрытой переменной _items
, поэтому все, что вам нужно сделать, это вернуть _items.Count
.
01
02
03
04
05
06
07
08
09
10
11
12
13
|
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
var cell = tableView.DequeueReusableCell (FeedItemCell.Key) as FeedItemCell;
if (cell == null)
cell = new FeedItemCell ();
// TODO: populate the cell with the appropriate data based on the indexPath
cell.TextLabel.Text = _items[indexPath.Row].Title;
cell.DetailTextLabel.Text = string.Format («{0} on {1}», _items [indexPath.Row].Creator, _items [indexPath.Row].PubDate);
return cell;
}
|
Следующая и, пожалуй, самая важная часть исходной реализации — это метод GetCell
. Целью этого метода является создание и повторное использование ячеек, присутствующих в списке.
1
2
3
|
var cell = tableView.DequeueReusableCell (FeedItemCell.Key) as FeedItemCell;
if (cell == null)
cell = new FeedItemCell ();
|
Первая строка вызывает метод DequeueReusableCell
передавая аргумент Key
ячейки, которую он ищет. Одна из идей, лежащих в основе списка, заключается в том, что если исходные данные содержат больше элементов, чем может поместиться в видимой части экрана, нет причин постоянно создавать эти ячейки и использовать системные ресурсы.
Вместо этого, когда ячейка выходит за пределы экрана, она не просто отбрасывается. Он помещается в пул других ячеек для дальнейшего использования. Позже, когда требуется ячейка с определенным ключом, система сначала проверяет пул повторно используемых ячеек для ячеек с этим ключом. Если никакая повторно используемая ячейка не может быть найдена, переменная ячейки является null
, и создается новый FeedItemCell
.
1
2
3
4
|
cell.TextLabel.Text = _items[indexPath.Row].Title;
cell.DetailTextLabel.Text = string.Format («{0} on {1}», _items [indexPath.Row].Creator, _items [indexPath.Row].PubDate);
return cell;
|
Если ячейка готова к использованию, она должна быть заполнена данными. Как вы это делаете, полностью зависит от вас. В нашем примере мы указали, что каждая ячейка имеет тип Subtitle
, что означает, что она имеет две метки. Верхняя Label
называется TextLabel
. В нашем примере он заполняется свойством Title
объекта RssItem
. Чтобы получить правильный объект RssItem
, мы используем свойство indexPath.Row
. Нижняя Label
называется DetailTextLabel
и заполняется конкатенацией свойств Creator
и PubDate
соответствующего объекта RssItem
.
1
2
3
4
5
6
7
|
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
var item = _items [indexPath.Row];
var url = new NSUrl (item.Link);
UIApplication.SharedApplication.OpenUrl (url);
}
|
Последний метод override
в классе FeedItemSource
— RowSelected
. Этот метод вызывается каждый раз, когда пользователь выбирает ячейку в списке. В этом случае, когда пользователь касается ячейки, вы RssItem
соответствующий экземпляр RssItem
используя свойство indexPath.Row
. Затем вы создаете новый объект NSUrl
со свойством Link
объекта RssItem
и передаете этот UIApplication.SharedApplication.OpenUrl
методу UIApplication.SharedApplication.OpenUrl
. Этот метод определит, какое приложение на устройстве или эмуляторе лучше всего подходит для обработки URL. В нашем примере, поскольку URL-адрес представляет веб-адрес, встроенный браузер устройства или симулятор будет обрабатывать запрос.
Пришло время обратить наше внимание на класс FeedItemController
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
namespace Feeder
{
public class FeedItemController : UITableViewController
{
private List<RssItem> _items;
public FeedItemController () : base ()
{
using (var client = new HttpClient ()) {
var xmlFeed = client.GetStringAsync («http://blog.xamarin.com/feed»).Result;
var doc = XDocument.Parse (xmlFeed);
XNamespace dc = «http://purl.org/dc/elements/1.1/»;
_items = (from item in doc.Descendants («item»)
select new RssItem {
Title = item.Element («title»).Value,
PubDate = DateTime.Parse (item.Element («pubDate»).Value),
Creator = item.Element (dc + «creator»).Value,
Link = item.Element («link»).Value
}).ToList();
}
}
public override void DidReceiveMemoryWarning ()
{
// Releases the view if it doesn’t have a superview.
base.DidReceiveMemoryWarning ();
// Release any cached data, images, etc that aren’t in use.
}
public async override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Register the TableView’s data source
TableView.Source = new FeedItemSource (_items);
}
}
}
|
Прежде чем вы сможете успешно скомпилировать этот код, вам необходимо добавить ссылку на сборку System.Xml.Linq
. Вы можете сделать это, щелкнув правой кнопкой мыши на References в вашем проекте и выбрав либо Add Reference, либо Edit References , в зависимости от используемой IDE. Вам также нужно будет добавить using System.Xml.Linq;
утверждение в верхней части файла класса.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
private List<RssItem> _items;
public FeedItemController () : base ()
{
using (var client = new HttpClient ()) {
var xmlFeed = client.GetStringAsync («http://blog.xamarin.com/feed»).Result;
var doc = XDocument.Parse (xmlFeed);
XNamespace dc = «http://purl.org/dc/elements/1.1/»;
_items = (from item in doc.Descendants («item»)
select new RssItem {
Title = item.Element («title»).Value,
PubDate = DateTime.Parse (item.Element («pubDate»).Value),
Creator = item.Element (dc + «creator»).Value,
Link = item.Element («link»).Value
}).ToList();
}
}
|
Именно здесь живет вся логика получения данных из RSS-ленты блога Xamarin. Если вы ознакомились с версией учебника Введение в Xamarin для Android, это, вероятно, выглядит знакомо. Это потому, что это точно такой же код.
Вы начинаете с создания HttpClient
и использования метода GetStringAsync
для загрузки данных, найденных по предоставленному URL-адресу, и используете метод Parse
в классе XDocument
для подготовки данных для некоторой магии Linq-to-Xml. XDocument
объект XDocument
, вы можете запросить его, чтобы получить значения всех дочерних элементов, найденных в RSS-канале, инициализировать экземпляры класса RssItem
и сохранить их в _items
переменной _items
.
После конструктора в реализации присутствуют только два метода. Это методы DidReceiveMemoryWarning
и ViewDidLoad
. Вам не нужно ничего делать с первым методом, но, как и большинство вещей, которые он платит, вы должны хотя бы знать, для чего он нужен.
Метод DidReceiveMemoryWarning
вызывается в любой точке выполнения этого класса, когда устройство или симулятор определили, что ваше приложение может занимать слишком много памяти и может быть прекращено. Это ваша возможность освободить некоторые ресурсоемкие ресурсы, чтобы этого не происходило. Как следует из его названия, метод ViewDidLoad
вызывается при загрузке представления и перед его представлением пользователю.
1
2
3
4
5
6
7
|
public async override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Register the TableView’s data source
TableView.Source = new FeedItemSource (_items);
}
|
В этом методе мы вызываем базовый метод ViewDidLoad
и создаем новый экземпляр класса FeedItemSource
, назначая его свойству TableView.Source
. Как только это будет сделано, пользователь сможет увидеть данные, которые вы извлекли из RSS-канала и поместили в представление списка. Если вы не уверены, откуда TableView
свойство TableView
, оно наследуется от базового класса FeedItemController
, UITableViewController
. Этот базовый класс предоставляет ссылку на фактическое табличное представление, которое находится в представлении контроллера представления.
Шаг 6: Соединяем все вместе
Теперь у вас есть все необходимое, чтобы представить пользователю список статей. Единственная проблема заключается в том, что ничего из этого не появляется пока. Причина в том, что вашему приложению не было приказано использовать FeedItemController
для показа данных пользователю. Для этого вам нужно сделать небольшую модификацию вашего класса AppDelegate
.
В настоящее время класс AppDelegate
содержит один метод, FinishedLaunching
. Этот метод вызывается делегатом приложения операционной системой. Чтобы все заработало, нам нужно внести небольшие изменения в его реализацию.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
// create a new window instance based on the screen size
window = new UIWindow (UIScreen.MainScreen.Bounds);
var controller = new FeedItemController ();
controller.View.BackgroundColor = UIColor.White;
controller.Title = «Xamarin Feeds»;
var navController = new UINavigationController (controller);
window.RootViewController = navController;
// make the window visible
window.MakeKeyAndVisible ();
return true;
}
|
Первые четыре строки довольно стандартны. Вы создаете новый экземпляр класса UIWindow
, который будет содержать пользовательский интерфейс вашего приложения. Затем вы создаете новый экземпляр класса FeedItemController
устанавливаете для его свойства BackgroundColor
значение UIColor.White
и присваивает ему Title
.
Следующие две строки могут показаться немного запутанными. Вы создаете новый экземпляр UINavigationController
, передаете ему экземпляр FeedItemController
в конструкторе, устанавливаете для свойства RootViewController
объекта window
значение UINavigationController
и вызываете MakeKeyAndVisible
. Почему мы должны пройти через эту стычку? Почему мы не можем установить RootViewController
на FeedItemController
и назвать его днем? Вы можете сделать это, и ваше приложение все еще будет работать. Однако, если вы это сделаете, строка состояния в верхней части экрана будет отображаться в верхней части вашего списка и будет выглядеть плохо. Добавление вашего контроллера в UINavigationController
— это маленький трюк, который выполняет две вещи:
- это добавляет пространство между верхней частью вашего контроля и верхней части экрана
- это делает свойство
Title
контроллера видимым
Пришло время создать и запустить приложение в iOS Simulator. Результат должен выглядеть примерно так, как показано на скриншоте ниже.
Вывод
И там у вас есть это. Вы только что успешно создали полнофункциональное приложение для iOS, используя только C # и Xamarin . Это довольно впечатляющее достижение, если задуматься.
Я надеюсь, что это вселит в вас уверенность и желание погрузиться глубже в сферу Xamarin и двери, которые он открывает для вас. Отсюда вы можете узнать о создании приложений Android в C # с помощью Xamarin, если вы еще этого не сделали. Если у вас есть, вы можете изучить, как вы можете создавать кроссплатформенные приложения, которые могут повторно использовать большую часть единой базы кода и работать на устройствах iOS и Android. Это то, что я покажу вам в следующем уроке.
Следующий шаг: смотреть курс
Если вы хотите узнать больше о Xamarin, ознакомьтесь с нашим курсом Создание многоплатформенных приложений на C # в Xamarin .
В ходе курса вы узнаете, как создать кроссплатформенное приложение из единой кодовой базы, которая будет работать на трех совершенно разных платформах: iOS, Android и Windows Phone 8. Думаешь, это невозможно? Через некоторое время вы будете делать это самостоятельно. Давай приступим к работе.
Вы можете воспользоваться бесплатной 14-дневной пробной версией подписки Tuts +. Для начала ознакомьтесь с нашими вариантами подписки или, если вы заинтересованы в этом курсе, вы можете приобрести его отдельно за 15 долларов! Вот предварительный просмотр, чтобы вы начали: