#ios #swift #xcode #contacts
Вопрос:
Я работал над решением, но не смог найти много информации в Интернете, структура контактов не предоставляет опцию удаления внизу. Я просмотрел много учебных пособий, но ни одно из них не работало над этим. Пожалуйста, посмотрите прилагаемое изображение.
import UIKit
import Contacts
import ContactsUI
struct Person {
let name: String
let id: String
let source: CNContact
}
class ViewController: UIViewController, CNContactPickerDelegate, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var models = [Person]()
var store = CNContactStore()
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(didTapAdd))
}
@objc func didTapAdd() {
let vc = CNContactPickerViewController()
vc.delegate = self
present(vc, animated: true)
}
func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
let mutableContact = contact.mutableCopy() as! CNMutableContact
let name = mutableContact.givenName
let identiefier = mutableContact.identifier
let model = Person(name: name, id: identiefier, source: mutableContact)
models.append(model)
tableView.reloadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
models.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "(models[indexPath.row].name)"
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let contact = models[indexPath.row].source
let vc = CNContactViewController(for: contact)
vc.shouldShowLinkedContacts = true
present(UINavigationController(rootViewController: vc), animated: true, completion: nil)
}
}
Комментарии:
1. Вы не можете удалить контакты с помощью
CNContactViewController
. Вы можете написать свой собственныйdelete
код.