我创建了一个自定义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 !