返回
iOS 开发实践秘诀:通讯录和侧滑删除单元格
IOS
2023-10-04 03:21:56
当今时代,“iOS 开发无前途” 和**“iOS 开发新人越来越少”** 等调侃甚嚣尘上。然而,事实并非如此。虽有此种趋势,但 iOS 开发领域仍不乏后来者。为此,我决定分享一些 iOS 开发实践技巧,旨在为初学者提供帮助(本人也是从 OC 转到 Swift 开发的)。
通讯录和侧滑删除单元格 这两个功能是 iOS 应用中常见的元素。本文将详细介绍如何实现这些功能,并提供代码示例。
1. 创建通讯录列表
import UIKit
import Contacts
class ContactsViewController: UITableViewController {
var contacts = [CNContact]()
override func viewDidLoad() {
super.viewDidLoad()
// 请求访问通讯录权限
let store = CNContactStore()
store.requestAccess(for: .contacts) { granted, error in
if granted {
// 获取通讯录中的联系人
let keysToFetch = [CNContactFormatter.descriptorForRequiredKeys(for: .fullName),
CNContactEmailAddressesKey, CNContactPhoneNumbersKey]
let fetchRequest = CNContactFetchRequest(keysToFetch: keysToFetch)
do {
try store.enumerateContacts(with: fetchRequest, usingBlock: { (contact, stop) in
self.contacts.append(contact)
})
self.tableView.reloadData()
} catch {
print("获取联系人失败:\(error)")
}
} else {
print("访问通讯录权限被拒绝")
}
}
}
// MARK: - Table view data source
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return contacts.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ContactCell", for: indexPath)
let contact = contacts[indexPath.row]
// 设置联系人姓名
cell.textLabel?.text = CNContactFormatter().string(from: contact)
// 设置联系人电话号码
if let phoneNumber = contact.phoneNumbers.first?.value.stringValue {
cell.detailTextLabel?.text = phoneNumber
}
return cell
}
}
2. 实现侧滑删除单元格
// 在 ContactsViewController 中添加以下方法
// MARK: - Table view delegate
override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let deleteAction = UIContextualAction(style: .destructive, title: "删除") { (action, view, completion) in
// 删除联系人
let contact = self.contacts[indexPath.row]
let store = CNContactStore()
do {
try store.delete(contact)
self.contacts.remove(at: indexPath.row)
self.tableView.deleteRows(at: [indexPath], with: .fade)
} catch {
print("删除联系人失败:\(error)")
}
completion(true)
}
deleteAction.image = UIImage(systemName: "trash.fill")
let configuration = UISwipeActionsConfiguration(actions: [deleteAction])
return configuration
}
结论
本文介绍了如何使用 Swift 在 iOS 应用中实现通讯录和侧滑删除单元格功能。这些功能对于构建用户友好且功能丰富的应用至关重要。
初学者在学习 iOS 开发时可能会遇到挑战,但通过坚持不懈的努力和寻求帮助,他们最终可以成为熟练的开发者。我希望本文对刚起步的人有所帮助,并鼓励他们在这个激动人心的领域继续探索。