Средство выбора меток CNLabelPhoneNumber

Я некоторое время искал решение по этому вопросу и не могу найти ничего для его реализации (скриншот приведен ниже).

Я создаю пользовательский ContactsViewController, который использует структуру CNContact для функций CRUD. Все понятно, как их реализовать, кроме выбора метки номера телефона. Есть ли для этого такая вещь, как контроллер представления выбора, или я должен реализовать его вручную?

Скриншот экрана редактирования ярлыка номера телефона в Контактах


person Lysdexia    schedule 23.11.2018    source источник
comment
@TamásSengel да, я тоже так думал, мне просто было интересно, есть ли список меток, которые можно получить, включая часть пользовательской метки, если пользователь когда-либо добавит ее.   -  person Lysdexia    schedule 26.11.2018


Ответы (1)


Вы должны реализовать этот экран вручную. Экран на вашем снимке экрана представляет собой UITableViewController с сгруппированным UITableView и вспомогательным индикатором галочки для выбранной ячейки.

Вот список предопределенных меток телефонных номеров (из документации Apple для разработчиков):

╔════════════════════════════╦═════════════════════╗
║           String           ║     Description     ║
╠════════════════════════════╬═════════════════════╣
║ CNLabelHome                ║ Home label          ║
║ CNLabelWork                ║ Work label          ║
║ CNLabelPhoneNumberiPhone   ║ iPhone number       ║
║ CNLabelPhoneNumberMobile   ║ Mobile phone number ║
║ CNLabelPhoneNumberMain     ║ Main phone number   ║
║ CNLabelPhoneNumberHomeFax  ║ Home fax number     ║
║ CNLabelPhoneNumberWorkFax  ║ Work fax number     ║
║ CNLabelPhoneNumberOtherFax ║ Other fax number    ║
║ CNLabelPhoneNumberPager    ║ Pager phone number  ║
╚════════════════════════════╩═════════════════════╝

Чтобы отобразить локализованные имена этих констант, используйте CNLabeledValue.localizedString(forLabel:) (спасибо, OOPer):

Свифт

let localizedLabelString = CNLabeledValue<NSString>.localizedString(forLabel: CNLabelPhoneNumberiPhone)
print(localizedLabelString) //iPhone

Цель-C

NSString *localizedLabelString = [CNLabeledValue localizedStringForLabel: CNLabelPhoneNumberiPhone];
NSLog(@"%@", localizedLabelString); //iPhone

Если вы хотите создать собственную метку для контакта, просто используйте произвольную строку для имени метки:

let phoneNumber = CNPhoneNumber(stringValue: "+18001234567")
let labeledPhoneNumber = CNLabeledValue(label: "arbitrary string", value: phoneNumber)
contact.phoneNumbers.append(labeledPhoneNumber)
person Tamás Sengel    schedule 26.11.2018
comment
Спасибо! Это должно сработать, но дополнительный вопрос. А как насчет тех меток, которые добавили как кастомные? - person Lysdexia; 26.11.2018
comment
@Lysdexia Если строковое значение метки отсутствует в списке предопределенных констант, то это пользовательская метка. - person Tamás Sengel; 26.11.2018
comment
Спасибо! Я принял ваш ответ, но дополнительный вопрос. Как я могу управлять пользовательскими ярлыками? Кроме того, в приложении «Контакты iOS» есть ярлык «дом», в документации его нет. Есть ли у вас какие-либо идеи? - person Lysdexia; 26.11.2018
comment
@Lysdexia Я добавил в таблицу ярлыки для дома и работы, спасибо, что упомянули об этом! Кроме того, я добавил в конец раздел о пользовательских метках. - person Tamás Sengel; 26.11.2018