Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Предупреждение
Поддержка конструктора 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: теперь подробнее.
