我创建了一个自定义UITableViewRowAction。因此,如果我通过UITableViewCell向左滑动,则会出现一个自定义按钮(没有自定义按钮,例如删除按钮)。如果我按下这个自定义按钮,UIView会出现,但仍然会显示按下的按钮。我想在按下UITableViewCell后看不到这个按钮。你们中的某些人是否知道如何在Swift中做到这一点并想帮助我?谢谢你的回答。
屏幕截图:https://www.dropbox.com/s/8g04kcvswujsn71/stackQuestion.png?dl=0
答案 0 :(得分:6)
我使用SWTableViewCell在我自己的应用中实现这些操作。看看它很棒!
您可以像这样使用此类:
<强> 1。导入SWTableViewCell类
按照上面的链接或只是在github上搜索SWTableViewCell。下载zip(或使用可可豆荚,如果您熟悉它们)。
打开解压缩的目录并找到PodsFile目录。将此目录的内容拖到项目中。这样做会导致Xcode要求创建桥接头。同意然后添加
#import "SWTableViewCell.h"
到那个桥接头文件。如果编译,您将得到一些 Parse问题错误:期望类型。要解决这些问题,只需添加
即可#import <UIKit/UIKit.h>
到NSMutableArray + SWUtilityButtons.h。现在我们已经准备好摇滚了。
<强> 2。创建SWTableViewCell子类
好的,您可以按原样使用单元格,但很可能您希望将单元格超出简单的默认单元格外观。如果是这样,请创建一个新的cocoa touch类(在swift中)并使您的单元格成为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
}
玩得开心,这是一套很棒的课程!