从 UITableView 的 UI 中删除 header 和相应的单元格
Remove header and corresponding cells from UI in UITableView
如何从 TableView "Edit" UI 中删除 header 和整个部分?我知道可以使用 tableView.deleteSections()
在代码中执行此操作,但我需要用户在点击 "Edit" 按钮时能够执行此操作。
解释如下:
.
我正在使用 Swift 2.
让我们从定义 UITableViewHeaderFooterView
的自定义子 class 开始。此 class 将用于在 table 视图中显示 headers。
class HeaderView : UITableViewHeaderFooterView {
var actionHandlerBlock: (Void -> Void)?;
override init(reuseIdentifier: String?) {
super.init(reuseIdentifier: reuseIdentifier)
let button = HeaderView.SetupButton()
addSubview(button);
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let button = HeaderView.SetupButton()
addSubview(button);
}
func removeButtonTapped(sender: AnyObject) {
actionHandlerBlock?();
}
}
private extension HeaderView {
static func SetupButton() -> UIButton {
let button = UIButton.init();
button.addTarget(self, action: "removeButtonTapped:", forControlEvents: .TouchUpInside)
button.setTitleColor(UIColor.redColor(), forState: .Normal)
button.setTitle("Remove section", forState: .Normal)
button.sizeToFit()
return button
}
}
这个class真的很简单。它的职责是创建带有一个附加视图的 header 视图 - 我们将使用该按钮来检测用户何时想要删除 table 视图的一部分。
每次用户点击 header 视图中的按钮时都会调用块 actionHandlerBlock
。
为了在用户点击我们的 header 视图中的按钮后删除部分,我们必须向 table 视图的委托提供一些自定义逻辑。
override func viewDidLoad() {
super.viewDidLoad()
tableView.registerClass(HeaderView.self, forHeaderFooterViewReuseIdentifier: "header")
//rest of your set up code here
}
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header = tableView.dequeueReusableHeaderFooterViewWithIdentifier("header") as! HeaderView
header.actionHandlerBlock = { [section] in
//don't forget to remove section from your data source here
tableView.deleteSections(NSIndexSet(index: section), withRowAnimation: .None)
}
return header
}
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 50
}
在函数 tableView:viewForHeaderInSection:
中,我们设置 header 视图的 actionHandlerBlock
属性。每次调用此块时,我们只需删除部分。请记住在调用 deleteSections:
方法之前修改 table 视图的数据源 - 您的数据源必须知道该部分的删除才能 return 正确的部分数量 numberOfSectionsInTableView:
数据源的功能。
如何从 TableView "Edit" UI 中删除 header 和整个部分?我知道可以使用 tableView.deleteSections()
在代码中执行此操作,但我需要用户在点击 "Edit" 按钮时能够执行此操作。
解释如下:
我正在使用 Swift 2.
让我们从定义 UITableViewHeaderFooterView
的自定义子 class 开始。此 class 将用于在 table 视图中显示 headers。
class HeaderView : UITableViewHeaderFooterView {
var actionHandlerBlock: (Void -> Void)?;
override init(reuseIdentifier: String?) {
super.init(reuseIdentifier: reuseIdentifier)
let button = HeaderView.SetupButton()
addSubview(button);
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let button = HeaderView.SetupButton()
addSubview(button);
}
func removeButtonTapped(sender: AnyObject) {
actionHandlerBlock?();
}
}
private extension HeaderView {
static func SetupButton() -> UIButton {
let button = UIButton.init();
button.addTarget(self, action: "removeButtonTapped:", forControlEvents: .TouchUpInside)
button.setTitleColor(UIColor.redColor(), forState: .Normal)
button.setTitle("Remove section", forState: .Normal)
button.sizeToFit()
return button
}
}
这个class真的很简单。它的职责是创建带有一个附加视图的 header 视图 - 我们将使用该按钮来检测用户何时想要删除 table 视图的一部分。
每次用户点击 header 视图中的按钮时都会调用块 actionHandlerBlock
。
为了在用户点击我们的 header 视图中的按钮后删除部分,我们必须向 table 视图的委托提供一些自定义逻辑。
override func viewDidLoad() {
super.viewDidLoad()
tableView.registerClass(HeaderView.self, forHeaderFooterViewReuseIdentifier: "header")
//rest of your set up code here
}
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header = tableView.dequeueReusableHeaderFooterViewWithIdentifier("header") as! HeaderView
header.actionHandlerBlock = { [section] in
//don't forget to remove section from your data source here
tableView.deleteSections(NSIndexSet(index: section), withRowAnimation: .None)
}
return header
}
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 50
}
在函数 tableView:viewForHeaderInSection:
中,我们设置 header 视图的 actionHandlerBlock
属性。每次调用此块时,我们只需删除部分。请记住在调用 deleteSections:
方法之前修改 table 视图的数据源 - 您的数据源必须知道该部分的删除才能 return 正确的部分数量 numberOfSectionsInTableView:
数据源的功能。