Swipe Actions trong UITableViewCell
Giới thiệu
Swipe actions trong
UITableViewCell
là một tính năng hữu ích cho phép người dùng thực hiện các hành động nhanh chóng như xóa, chỉnh sửa, hoặc đánh dấu một mục trong danh sách. iOS cung cấp các API tiện lợi để tùy chỉnh và triển khai swipe actions trong ứng dụng của bạn. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về cách tạo và tùy chỉnh swipe actions trongUITableViewCell
.
Các bước thực hiện
1. Cài đặt UITableView và UITableViewCell
Đầu tiên, chúng ta cần thiết lập một UITableView
và các UITableViewCell
cơ bản.
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
let tableView = UITableView()
var items = ["Item 1", "Item 2", "Item 3"]
override func viewDidLoad() {
super.viewDidLoad()
tableView.frame = self.view.bounds
tableView.dataSource = self
tableView.delegate = self
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
self.view.addSubview(tableView)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = items[indexPath.row]
return cell
}
}
2. Thêm Swipe Actions cho UITableViewCell
Chúng ta sẽ sử dụng phương thức tableView(_:trailingSwipeActionsConfigurationForRowAt:)
để thêm các hành động swipe.
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
// Tạo hành động xóa
let deleteAction = UIContextualAction(style: .destructive, title: "Delete") { (action, view, completionHandler) in
self.items.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
completionHandler(true)
}
deleteAction.backgroundColor = .red
// Tạo hành động chỉnh sửa
let editAction = UIContextualAction(style: .normal, title: "Edit") { (action, view, completionHandler) in
// Thực hiện hành động chỉnh sửa
completionHandler(true)
}
editAction.backgroundColor = .blue
let configuration = UISwipeActionsConfiguration(actions: [deleteAction, editAction])
return configuration
}
3. Thêm Swipe Actions cho bên trái của UITableViewCell
Ngoài việc thêm hành động swipe ở bên phải, chúng ta cũng có thể thêm hành động ở bên trái bằng phương thức tableView(_:leadingSwipeActionsConfigurationForRowAt:)
.
func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
// Tạo hành động yêu thích
let favoriteAction = UIContextualAction(style: .normal, title: "Favorite") { (action, view, completionHandler) in
// Thực hiện hành động yêu thích
completionHandler(true)
}
favoriteAction.backgroundColor = .orange
let configuration = UISwipeActionsConfiguration(actions: [favoriteAction])
return configuration
}
4. Tùy chỉnh UI của Swipe Actions
Chúng ta có thể tùy chỉnh màu sắc và hình ảnh của các hành động swipe.
let deleteAction = UIContextualAction(style: .destructive, title: "Delete") { (action, view, completionHandler) in
self.items.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
completionHandler(true)
}
deleteAction.backgroundColor = .red
deleteAction.image = UIImage(systemName: "trash")
let editAction = UIContextualAction(style: .normal, title: "Edit") { (action, view, completionHandler) in
// Thực hiện hành động chỉnh sửa
completionHandler(true)
}
editAction.backgroundColor = .blue
editAction.image = UIImage(systemName: "pencil")
Ví dụ đầy đủ
Dưới đây là ví dụ đầy đủ của việc cài đặt swipe actions trong UITableViewCell
.
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
let tableView = UITableView()
var items = ["Item 1", "Item 2", "Item 3"]
override func viewDidLoad() {
super.viewDidLoad()
tableView.frame = self.view.bounds
tableView.dataSource = self
tableView.delegate = self
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
self.view.addSubview(tableView)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = items[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let deleteAction = UIContextualAction(style: .destructive, title: "Delete") { (action, view, completionHandler) in
self.items.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
completionHandler(true)
}
deleteAction.backgroundColor = .red
deleteAction.image = UIImage(systemName: "trash")
let editAction = UIContextualAction(style: .normal, title: "Edit") { (action, view, completionHandler) in
// Thực hiện hành động chỉnh sửa
completionHandler(true)
}
editAction.backgroundColor = .blue
editAction.image = UIImage(systemName: "pencil")
let configuration = UISwipeActionsConfiguration(actions: [deleteAction, editAction])
return configuration
}
func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let favoriteAction = UIContextualAction(style: .normal, title: "Favorite") { (action, view, completionHandler) in
// Thực hiện hành động yêu thích
completionHandler(true)
}
favoriteAction.backgroundColor = .orange
favoriteAction.image = UIImage(systemName: "star")
let configuration = UISwipeActionsConfiguration(actions: [favoriteAction])
return configuration
}
}
Kết luận
Swipe actions trong
UITableViewCell
cung cấp một cách trực quan và dễ dàng để người dùng tương tác với danh sách dữ liệu. Bằng cách sử dụng các phương thức và API mà iOS cung cấp, bạn có thể tùy chỉnh và mở rộng các hành động này để phù hợp với nhu cầu của ứng dụng. Hy vọng bài viết này giúp bạn hiểu rõ hơn về cách triển khai và sử dụng swipe actions trongUITableViewCell
.
All rights reserved