我创建了一个自定义UITableViewRowAction。因此,如果我在UITableViewCell上向左滑动,则会出现一个自定义按钮(例如,没有一个自定义按钮是删除按钮)。如果按此自定义按钮,则会显示一个UIView,但仍然显示所按的按钮。我想在按下按钮后看到没有该按钮的UITableViewCell。你们中有人知道如何在Swift中执行此操作,并想帮助我吗?感谢您的回答。

截图:https://www.dropbox.com/s/8g04kcvswujsn71/stackQuestion.png?dl=0

最佳答案

我使用SWTableViewCell在自己的应用中实现了这些操作。让它看起来很棒!

您可以像这样使用此类:

1.导入SWTableViewCell类

请点击上面的链接,或者在github上搜索SWTableViewCell。下载zip(如果您熟悉它们,或使用可可豆荚)。

打开解压缩的目录并找到PodsFile目录。将该目录的内容拖到您的项目中。这样做将导致Xcode要求创建桥接头。同意然后添加

#import "SWTableViewCell.h"

到该桥接头文件。如果您进行编译,则会出现一些Parse问题错误:预期的类型。要解决这些问题,只需添加
#import <UIKit/UIKit.h>

到NSMutableArray + SWUtilityButtons.h。现在我们准备好摇滚了。

2.创建一个SWTableViewCell子类

好的,您可以按原样使用单元格,但是很可能您希望在简单的默认单元格外观之外扩展单元格。如果是这样,请快速创建一个新的可可接触类,并将您的单元格设置为SWTableViewCell的子类。它看起来应该像这样:
import UIKit

class MySWCell: SWTableViewCell {

}

如果您正在使用情节提要,则可以在此类的表视图中创建单元格,并连接所有出口/动作等。创建单元格所需的所有可爱的工作就如同您需要的一样。

3.在TableView中使用子类

对于这个示例,我只是从Master-Detail基础项目开始的。您将cellForRowAtIndexPath方法更改为使用新的自定义单元格:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as MySWCell

    let object = objects[indexPath.row] as NSDate
    cell.textLabel!.text = object.description
    return cell
}

尽管这很棒,但是您可能想要添加左右工具按钮,这就是我们执行所有这些操作的原因:

4.添加实用程序按钮

您可以在cellForRowAtIndexPath中执行此操作,但希望将其放在单独的函数中:
func getRightUtilityButtonsToCell()-> NSMutableArray{
    var utilityButtons: NSMutableArray = NSMutableArray()

    utilityButtons.sw_addUtilityButtonWithColor(UIColor.redColor(), title: NSLocalizedString("Delete", comment: ""))
    utilityButtons.sw_addUtilityButtonWithColor(UIColor.blueColor(), title: NSLocalizedString("Email", comment: ""))
    return utilityButtons
}

现在在cellForRowAtIndexPath中使用此方法:
cell.rightUtilityButtons = self.getRightUtilityButtons();

如果要向左滑动单元格,将有两个按钮:

但是,这些按钮的作用不是很大。我们需要与代表保持一致。

5.响应按钮

首先,告诉单元格您是它的代表。同样,在cellForRowAtIndexPath中添加以下行:
cell.delegate = self;

然后将类定义调整为:
class MasterViewController: UITableViewController, SWTableViewCellDelegate
MasterViewController将替换为您已处理tableview数据源/委托的类的名称。

现在实现didTriggerRightUtilityButtonWithIndex函数:
func swipeableTableViewCell(cell: SWTableViewCell!, didTriggerRightUtilityButtonWithIndex index: Int) {
    if index == 0 {
        println("delete button")
    }else {
        println("print button")
    }
}

现在您可以开始了!您还可以使用hideUtilityButtonsAnimated方法内部的didTriggerRightUtilityButtonWithIndex方法,告诉单元执行一些很酷的事情,例如隐藏按钮后:
cell.hideUtilityButtonsAnimated(true);

当tableview滚动时,此函数将隐藏单元格:
func swipeableTableViewCellShouldHideUtilityButtonsOnSwipe(cell: SWTableViewCell!) -> Bool {
    return true
}

玩得开心,这是一个很棒的 class !

08-05 17:46