gpt4 book ai didi

ios - 如何更改 UITableViewRowAction 的标题

转载 作者:搜寻专家 更新时间:2023-10-31 08:18:15 24 4
gpt4 key购买 nike

我有一个用例,我需要更改 UITableViewRowAction 的标题。例如,我有一个餐厅单元格,当向右滑动时我会显示“书签(104)”,其中“书签”是操作,104 表示已有 104 人为其添加了书签。单击它时,我希望它更改为“书签(105)”,因为显然有一个新用户(当前用户本人)已将其添加为书签。我怎么做?尝试了以下代码,但它不起作用。

let likeAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "bookmark\n\(count)", handler:{(action, indexpath) -> Void in
....
count++
action.title = "bookmark\n\(count)"
});

最佳答案

这是一个简单而肮脏的例子。

假设您有一个带有名称和喜欢值的餐厅类:

class Restaurant {
var name: String?
var likes: Int = 0
}

您初始化了一堆 Restaurant 对象,并将它们放在一个名为 dataSource 的数组中。您的 TableView 数据源方法将如下所示:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.dataSource.count
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell = UITableViewCell(style: .Default, reuseIdentifier: "cell");
cell.textLabel?.text = dataSource[indexPath.row].name

return cell
}


// Override to support editing the table view.
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
// This can be empty if you're not deleting any rows from the table with your edit actions
}

override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {

// First, create a share action with the number of likes
let shareAction = UITableViewRowAction(style: .Default, title: "\(self.dataSource[indexPath.row].likes)") { (action, indexPath) -> Void in

// In your closure, increment the number of likes for the restaurant, and slide the cell back over
self.dataSource[indexPath.row].likes++
self.tableView.setEditing(false, animated: true)
}

return [shareAction] // return your array of edit actions for your cell. In this case, we're only returning one action per row.
}

我不会从头开始写一个可滚动的单元格,因为 this question有很多选项可供您使用。

不过,我对 Andrew Carter 试图通过 subview 进行迭代以直接访问编辑操作中的 UIButton 的尝试很感兴趣。这是我的尝试:

首先,创建对 UITableViewCell(或单元格数组)的引用,您希望进行修改,对于此示例,我将使用单个单元格:

var cellRef: UITableViewCell?

// ...

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell = UITableViewCell(style: .Default, reuseIdentifier: "cell");
cell.textLabel?.text = dataSource[indexPath.row].name

cellRef = cell;

return cell
}

在您的分享操作中,遍历按钮的 subview 。我们正在寻找 UITableViewCellDeleteConfirmationView_UITableViewCellActionButton对象(链接以供引用的私有(private) header )。

let shareAction = UITableViewRowAction(style: .Default, title: "\(self.dataSource[indexPath.row].likes)") { (action, indexPath) -> Void in

var deleteConfirmationView: UIView? // UITableViewCellDeleteConfirmationView

if let subviews = self.cellRef?.subviews {
for subview in subviews {
if NSClassFromString("UITableViewCellDeleteConfirmationView") != nil {

if subview.isKindOfClass(NSClassFromString("UITableViewCellDeleteConfirmationView")!) {
deleteConfirmationView = subview
break
}
}
}
}

if let unwrappedDeleteView = deleteConfirmationView {
if unwrappedDeleteView.respondsToSelector("_actionButtons") {
let actionbuttons = unwrappedDeleteView.valueForKey("_actionButtons") as? [AnyObject]
if let actionButton = actionbuttons?.first as? UIButton { // _UITableViewCellActionButton
actionButton.setTitle("newText", forState: .Normal)
}
}

}
}

关于ios - 如何更改 UITableViewRowAction 的标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34849251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com