返回

iOS 开发实践秘诀:通讯录和侧滑删除单元格

IOS

当今时代,“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 开发时可能会遇到挑战,但通过坚持不懈的努力和寻求帮助,他们最终可以成为熟练的开发者。我希望本文对刚起步的人有所帮助,并鼓励他们在这个激动人心的领域继续探索。