Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Предупреждение
Поддержка конструктора iOS была прекращена в Visual Studio 2019 версии 16.8 и Visual Studio 2019 для Mac версии 8.8. В Visual Studio 2019 версии 16.9 и Visual Studio для Mac версии 8.9 этот конструктор удален. Создавать пользовательские интерфейсы iOS рекомендуется непосредственно на Mac с помощью Xcode Interface Builder. Дополнительные сведения см. в статье Проектирование пользовательских интерфейсов с помощью Xcode.
Это руководство описывает создание приложения, которое преобразует введенный пользователем буквенно-цифровой телефонный номер в числовой телефонный номер и затем набирает его. Окончательный вариант приложения выглядит примерно так:
Требования
Для разработки на iOS с помощью Xamarin требуется следующее:
- Компьютер Mac под управлением macOS High Sierra 10.13 или последующей версии.
- Последняя версия Xcode и пакета SDK iOS из App Store.
Xamarin.iOS работает со следующими конфигурациями:
- Последняя версия Visual Studio для Mac, удовлетворяющая указанным выше требованиям.
Пошаговые инструкции по установке см. в руководстве по установке Xamarin.iOS на Mac.
Xamarin.iOS работает со следующими конфигурациями:
- Последняя версия Visual Studio 2019 или Visual Studio 2017 Community, Professional или Enterprise на базе Windows 10 или более поздней версии, связанная с узлом сборки Mac, удовлетворяющим указанным выше требованиям.
Пошаговые инструкции по установке см. в руководстве по установке Xamarin.iOS в Windows.
Перед началом работы скачайте набор значков приложения Xamarin.
Пошаговое руководство по Visual Studio для Mac
Это пошаговое руководство описывает создание приложения Phoneword, которое преобразует буквенно-цифровой телефонный номер в числовой.
Запустите Visual Studio для Mac из папки Applications (Приложения) или из Spotlight:

На экране запуска нажмите кнопку Новый проект... , чтобы создать новое решение Xamarin.iOS:

В диалоговом окне "Новое решение" выберите шаблон приложения единого представления приложения > iOS>, гарантируя выбор C# . Щелкните Далее.

Настройте приложение. Присвойте ему имя
Phoneword_iOS, а для остальных параметров сохраните значения по умолчанию. Щелкните Далее.
Оставьте имеющееся имя для проекта и решения. Выберите расположение проекта или оставьте значение по умолчанию:

Нажмите кнопку Создать, чтобы создать Решение.
Откройте файл Main.storyboard, дважды щелкнув его на Панели решения. Убедитесь, что файл открыт с помощью конструктора iOS Visual Studio (щелкните правой кнопкой мыши раскадровки и выберите "Открыть с помощью > конструктора iOS"). Это позволяет создавать пользовательский интерфейс визуально:

Обратите внимание на то, что классы размера включены по умолчанию. Чтобы узнать о них подробнее, см. руководство по унифицированным раскадровкам.
Откройте панель элементов, введите "метка" в поле поиска и перетащите элемент Метка в область конструктора (в центре):

Примечание.
Вы можете открыть панель свойств или панель элементов в любое время, перейдя к панели просмотра>.
Используя маркеры перетаскивания элементов управления (кружки вокруг элемента управления), сделайте метку шире:

Выбрав элемент Метка в области конструктора, используйте Панель свойств, чтобы изменить свойство Текст элемента Метка на "Enter a Phoneword" (Введите слово-номер):

Выполните поиск строки "текстовое поле" на панели элементов и перетащите элемент Текстовое поле с панели элементов в область конструктора, поместив его под элементом Метка. Измените ширину, чтобы элемент Текстовое поле был такой же ширины, что и Метка:

Выбрав элемент Текстовое поле в области конструктора, измените для текстового поля свойство Имя в разделе "Удостоверение" на панели свойств, указав новое значение
PhoneNumberText, а для свойства Текст введите "1-855-XAMARIN":
Перетащите элемент Кнопка из панели элементов в область конструктора и поместите его под элементом Текстовое поле. Настройте ширину элемента Кнопка, чтобы выровнять его с элементами Текстовое поле и Метка:

Выбрав элемент Кнопка в области конструктора, измените свойство Имя в разделе УдостоверениеПанели свойств на
TranslateButton. Измените значение свойства Заголовок на "Translate" (Преобразовать):
Повторите два предыдущих действия, перетащите элемент Кнопка из панели элементов в область конструктора и поместите его под первым элементом Кнопка. Настройте ширину элемента Кнопка, чтобы выровнять его с первым элементом Кнопка:

Выбрав второй элемент Кнопка в области конструктора, измените свойство Имя в разделе УдостоверениеПанели свойств на
CallButton. Измените значение свойства Заголовок на "Call" (Вызов):
Сохраните изменения, перейдя к файлу > сохранения или нажав клавиши ctrl + s.
В приложение нужно добавить логику для преобразования телефонных номеров из буквенно-цифровых в цифровые. Добавьте новый файл в проект, щелкнув правой кнопкой мыши проект Phoneword_iOS на панели решения и нажав кнопку "Добавить > новый файл" или нажав клавиши " + n:

В диалоговом окне "Новый файл" выберите "Общий > пустой класс" и назовите новый файл
PhoneTranslator:
Создается пустой класс C#. Удалите код шаблона и замените его следующим:
using System.Text; using System; namespace Phoneword_iOS { public static class PhoneTranslator { public static string ToNumber(string raw) { if (string.IsNullOrWhiteSpace(raw)) { return ""; } else { raw = raw.ToUpperInvariant(); } var newNumber = new StringBuilder(); foreach (var c in raw) { if (" -0123456789".Contains(c)) { newNumber.Append(c); } else { var result = TranslateToNumber(c); if (result != null) { newNumber.Append(result); } } // otherwise we've skipped a non-numeric char } return newNumber.ToString(); } static bool Contains (this string keyString, char c) { return keyString.IndexOf(c) >= 0; } static int? TranslateToNumber(char c) { if ("ABC".Contains(c)) { return 2; } else if ("DEF".Contains(c)) { return 3; } else if ("GHI".Contains(c)) { return 4; } else if ("JKL".Contains(c)) { return 5; } else if ("MNO".Contains(c)) { return 6; } else if ("PQRS".Contains(c)) { return 7; } else if ("TUV".Contains(c)) { return 8; } else if ("WXYZ".Contains(c)) { return 9; } return null; } } }Сохраните файл PhoneTranslator.cs и закройте его.
Добавьте код для подключения пользовательского интерфейса. Для этого дважды щелкните файл ViewController.cs на Панели решения, чтобы открыть его:

Начните с подключения
TranslateButton. Найдите методViewDidLoadв классе ViewController и добавьте следующий код под вызовомbase.ViewDidLoad():string translatedNumber = ""; TranslateButton.TouchUpInside += (object sender, EventArgs e) => { // Convert the phone number with text to a number // using PhoneTranslator.cs translatedNumber = PhoneTranslator.ToNumber( PhoneNumberText.Text); // Dismiss the keyboard if text field was tapped PhoneNumberText.ResignFirstResponder (); if (translatedNumber == "") { CallButton.SetTitle ("Call ", UIControlState.Normal); CallButton.Enabled = false; } else { CallButton.SetTitle ("Call " + translatedNumber, UIControlState.Normal); CallButton.Enabled = true; } };Включите
using Phoneword_iOS;, если пространство имен файла отличается.Добавьте код, реагирующий на нажатие пользователем второй кнопки, которая называется
CallButton. Поместите следующий код после кода дляTranslateButtonи добавьтеusing Foundation;в начало файла:CallButton.TouchUpInside += (object sender, EventArgs e) => { // Use URL handler with tel: prefix to invoke Apple's Phone app... var url = new NSUrl ("tel:" + translatedNumber); // ...otherwise show an alert dialog if (!UIApplication.SharedApplication.OpenUrl (url)) { var alert = UIAlertController.Create ("Not supported", "Scheme 'tel:' is not supported on this device", UIAlertControllerStyle.Alert); alert.AddAction (UIAlertAction.Create ("Ok", UIAlertActionStyle.Default, null)); PresentViewController (alert, true, null); } };Сохраните изменения, а затем создайте приложение, выбрав "Построить > все " или нажав клавишу " " + B". Если приложение компилируется, в верхней части интегрированной среды разработки появится сообщение об успешном выполнении:

При наличии ошибок просмотрите предыдущие шаги и исправьте все ошибки, пока сборка приложения не будет проходить успешно.
Наконец, протестируйте приложение в симуляторе iOS. В верхнем левом углу интегрированной среды разработки выберите значение Отладка в первом раскрывающемся списке и iPhone XR iOS 12.0 или другой доступный симулятор во втором, а затем нажмите кнопку Запустить (треугольная кнопка, которая напоминает кнопку воспроизведения):

Примечание.
Сейчас, в связи с требованиями Apple, при создании кода для устройства или симулятора может потребоваться сертификат разработки или удостоверение подписывания. Чтобы настроить их, следуйте указаниям в руководстве по подготовке устройств.
В результате приложение запускается в симуляторе iOS:

Симулятор iOS не поддерживает телефонные звонки; при попытке выполнить вызов отображается диалоговое окно предупреждения:

Пошаговое руководство по Visual Studio
Это пошаговое руководство описывает создание приложения Phoneword, которое преобразует буквенно-цифровой телефонный номер в числовой.
Примечание.
В этом пошаговом руководстве используется Visual Studio Enterprise 2017 на виртуальной машине Windows 10. Ваша конфигурация может отличаться при условии соблюдения приведенных выше требований, но имейте в виду, что некоторые снимки экрана могут отличаться от вашей конфигурации.
Примечание.
Прежде чем продолжить работу с пошаговым руководством, вам нужно подключиться к компьютеру Mac из Visual Studio. Это вызвано тем, что Xamarin.iOS использует инструменты Apple при сборке и запуске приложений. Настройка описана в инструкциях из руководства по связыванию с компьютером Mac.
Запустите Visual Studio из меню Пуск:

Создайте новое решение Xamarin.iOS, выбрав файл > нового > проекта... > Visual C# > iPhone и iPad iOS > App (Xamarin):

В следующем диалоговом окне выберите шаблон Приложение с одним представлением и нажмите OK, чтобы создать проект:

Убедитесь, что значок агента Mac Xamarin на панели инструментов отображается зеленым цветом.

Если это не так, то есть отсутствует подключение к компьютеру сборки Mac, выполните инструкции из руководства по выбору конфигурации, чтобы настроить подключение.
Откройте файл Main.storyboard в конструкторе iOS, дважды щелкнув его в обозревателе решений:

Откройте вкладку Панель элементов, введите "метка" в поле поиска и перетащите элемент Метка в область конструктора (в центре):

Захватите маркеры перетаскивания и растяните метку в стороны:

Выбрав элемент Метка в области конструктора, используйте окна свойств, чтобы изменить свойство Текст элемента Метка на "Enter a Phoneword" (Введите слово-номер):

Примечание.
Вы можете открыть Свойства или Панель элементов в любое время. Для этого перейдите в меню Вид.
Выполните поиск строки "текстовое поле" на панели элементов и перетащите элемент Текстовое поле с панели элементов в область конструктора, поместив его под элементом Метка. Измените ширину, чтобы элемент Текстовое поле был такой же ширины, что и Метка:

Выбрав элемент Текстовое поле в области конструктора, измените егосвойствоИмя в разделе "Удостоверение" свойств на
PhoneNumberText, а также измените свойство Текст на "1-855-XAMARIN":
Перетащите элемент Кнопка из панели элементов в область конструктора и поместите его под элементом Текстовое поле. Настройте ширину элемента Кнопка, чтобы выровнять его с элементами Текстовое поле и Метка:

Выбрав элемент Кнопка в области конструктора, измените свойство Имя в разделе Удостоверениесвойств на
TranslateButton. Измените значение свойства Заголовок на "Translate" (Преобразовать):
Повторите два предыдущих действия, перетащите элемент Кнопка из панели элементов в область конструктора и поместите его под первым элементом Кнопка. Настройте ширину элемента Кнопка, чтобы выровнять его с первым элементом Кнопка:

Выбрав второй элемент Кнопка в области конструктора, измените свойство Имя в разделе Удостоверениесвойств на
CallButton. Измените значение свойства Заголовок на "Call" (Вызов):
Сохраните изменения, перейдя к файлу > "Сохранить все" или нажав клавиши CTRL+s.
Добавьте код, который преобразует телефонные номера из буквенно-цифровой записи в цифровую. Для этого сначала добавьте новый файл в проект, щелкнув правой кнопкой мыши проект Phoneword в Обозреватель решений и выбрав "Добавить > новый элемент" или нажав клавиши CTRL+SHIFT+A:

В диалоговом окне "Добавить новый элемент" (щелкните проект правой кнопкой мыши, выберите "Добавить > новый элемент..."), выберите класс Apple > и назовите новый файл
PhoneTranslator:
Внимание
Убедитесь, что выбран шаблон класса, в значке которого указан C#. В противном случае ссылка на этот класс может быть невозможна.
Создается класс C#. Удалите код шаблона и замените его следующим:
using System.Text; using System; namespace Phoneword { public static class PhoneTranslator { public static string ToNumber(string raw) { if (string.IsNullOrWhiteSpace(raw)) { return ""; } else { raw = raw.ToUpperInvariant(); } var newNumber = new StringBuilder(); foreach (var c in raw) { if (" -0123456789".Contains(c)) { newNumber.Append(c); } else { var result = TranslateToNumber(c); if (result != null) { newNumber.Append(result); } } // otherwise we've skipped a non-numeric char } return newNumber.ToString(); } static bool Contains (this string keyString, char c) { return keyString.IndexOf(c) >= 0; } static int? TranslateToNumber(char c) { if ("ABC".Contains(c)) { return 2; } else if ("DEF".Contains(c)) { return 3; } else if ("GHI".Contains(c)) { return 4; } else if ("JKL".Contains(c)) { return 5; } else if ("MNO".Contains(c)) { return 6; } else if ("PQRS".Contains(c)) { return 7; } else if ("TUV".Contains(c)) { return 8; } else if ("WXYZ".Contains(c)) { return 9; } return null; } } }Сохраните файл PhoneTranslator.cs и закройте его.
Дважды щелкните файл ViewController.cs в обозревателе решений, чтобы открыть его и добавить логику, обрабатывающую взаимодействие с кнопками:

Начните с подключения
TranslateButton. В классе ViewController найдите методViewDidLoad. Добавьте следующий код кнопки внутрьViewDidLoad, под вызовомbase.ViewDidLoad():string translatedNumber = ""; TranslateButton.TouchUpInside += (object sender, EventArgs e) => { // Convert the phone number with text to a number // using PhoneTranslator.cs translatedNumber = PhoneTranslator.ToNumber(PhoneNumberText.Text); // Dismiss the keyboard if text field was tapped PhoneNumberText.ResignFirstResponder (); if (translatedNumber == "") { CallButton.SetTitle ("Call", UIControlState.Normal); CallButton.Enabled = false; } else { CallButton.SetTitle ("Call " + translatedNumber, UIControlState.Normal); CallButton.Enabled = true; } };Включите
using Phoneword;, если пространство имен файла отличается.Добавьте код, реагирующий на нажатие пользователем второй кнопки, которая называется
CallButton. Поместите следующий код после кода дляTranslateButtonи добавьтеusing Foundation;в начало файла:CallButton.TouchUpInside += (object sender, EventArgs e) => { var url = new NSUrl ("tel:" + translatedNumber); // Use URL handler with tel: prefix to invoke Apple's Phone app, // otherwise show an alert dialog if (!UIApplication.SharedApplication.OpenUrl (url)) { var alert = UIAlertController.Create ("Not supported", "Scheme 'tel:' is not supported on this device", UIAlertControllerStyle.Alert); alert.AddAction (UIAlertAction.Create ("Ok", UIAlertActionStyle.Default, null)); PresentViewController (alert, true, null); } };Сохраните изменения, а затем создайте приложение, выбрав "Построить решение сборки>" или нажав клавиши CTRL+SHIFT+B. Если приложение компилируется, сообщение об успешном выполнении появится в нижней части интегрированной среды разработки:

При наличии ошибок просмотрите предыдущие шаги и исправьте все ошибки, пока сборка приложения не будет проходить успешно.
Наконец, протестируйте приложение в удаленном симуляторе iOS. На панели инструментов интегрированной среды разработки выберите Отладка и iPhone 8 Plus iOS x.x в раскрывающихся меню и щелкните значок Запустить (зеленый треугольник, похожий на кнопку воспроизведения):

В результате приложение запускается в симуляторе iOS:

Симулятор iOS не поддерживает телефонные звонки; при попытке выполнить вызов отображается диалоговое окно предупреждения:

Поздравляем! Вы создали свое первое приложение Xamarin.iOS!
Пришло время закрепить и углубить приобретенные знания и навыки с помощью раздела Привет, iOS: теперь подробнее.
