2017-04-08 4 views
1

저는 Swift에서 코딩하고 자신을 가르치려는 것이 매우 새로 습득되었습니다. Swift 3의 ContactPicker View UI에서 여러 항목을 선택하는 방법을 알아내는 데 어려움을 겪고 있습니다.Swift에서 ContactUI의 다중 선택 3

설명서를 읽는 중에 여러 항목을 선택하려면 [CNContactProperty]을 사용해야하지만 모호합니다. 이렇게하면 배열의 멤버가 아니기 때문에 givenName 및 값을 인쇄하기 위해 속성을 호출 할 수 없습니다. 또한 [CNContactProperty]의 구문을 사용할 때 내 선택기보기가 선택을 끝내기 위해 "완료"버튼을 표시하지 않습니다. 피커보기에서 벗어나는 유일한 방법은 취소입니다.

Swift의 이전 버전에 대한 여러 답변을 찾았지만 Swift 3에서이 기능을 사용하는 방법에 관심이 있습니다. 궁극적으로 UIMessageComposer의 연락처 필드를 미리 채워서 배열을 보내기 단추를 한 번 누름으로써. 당신의 CNContactPickerDelegate 구현에서

// this is the code that works for a single selection 
import UIKit 
import ContactsUI 
import Contacts 

class MainViewController: UIViewController, CNContactPickerDelegate { 

// select Contacts to message from "Set Up" Page 
@IBAction func pickContacts(_ sender: Any) { 

    let contactPicker = CNContactPickerViewController() 

    contactPicker.delegate = self 
    contactPicker.displayedPropertyKeys = [CNContactPhoneNumbersKey] 

    self.present(contactPicker, animated: true, completion: nil) 

} 

//allow contact selection and dismiss pickerView 
func contactPicker(_ picker: CNContactPickerViewController, didSelect contactsProperty: CNContactProperty) { 
    let contact = contactsProperty.contact 
    let phoneNumber = contactsProperty.value as! CNPhoneNumber 

    print(contact.givenName) 
    print(phoneNumber.stringValue) 

} 

답변

2

, 당신은 구현 : 특정 속성을 선택할 때 호출되는

contactPicker(_ picker: CNContactPickerViewController, didSelect contactsProperty: CNContactProperty) 

. 그러나 여러 연락처를 선택하려면 다음을 구현해야합니다.

contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]) 

그러면 선택한 연락처의 배열이 반환됩니다. 그래서 위임 구현 방법은 다음과 같이 표시 될 수 있습니다

물론
func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]) { 
    for contact in contacts { 
     let phoneNumber = contact.value(forKey:CNContactPhoneNumbersKey) 
     print(contact.givenName) 
     print(phoneNumber) 
    } 
} 

phoneNumber 변수는 전화 번호의 배열을 포함하고 특정 번호를 얻을 수있는 배열을 통해 루프 필요 했어.

+0

고맙습니다. 선생님은 생명의 은인입니다. "print (phoneNumber)"명령은 여전히 ​​나에게 긴 문자열을 주었지만 약간의 변경을가했습니다. 아직도 당신에게 충분히 감사 할 수 없습니다. // 전화 번호를 짧은 문자열로 바꾸기 /// phoneNumber = (contact.phoneNumbers [0] .value) .value (forKey : "digits")! – FatyP33

+0

도와 드리겠습니다 :) 위의 답변이 도움이된다면 upvote를 잊어 버리지 말고 "올바른"것으로 표시하십시오. – Fahim