gpt4 book ai didi

ios - 检测双击和单击 UITableViewCell 以执行两个操作

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

我有一个 PFQueryTableViewController,我试图在其中学习一些 tableView 交互。

我目前拥有的:tableView 单元格在点击 didSelectRowAtIndexPath 时会增加其高度,或者我基本上可以使用 performSegueWithIdentifier 将单元格相关数据转移到下一个 viewController prepareForSegue 使用一次点击。

在下面的代码中,如果我注释“点击代码以增加 tableView 单元格的高度”代码,我可以检测到双击。否则,单击会增加高度,因为代码在 didSelect block 内。

我需要:单击时,单元格高度增加或减少。当单元格高度增加时,如果我双击,它应该将单元格数据转到下一个 UIViewController

如果不是,单击应该会增加或减少高度。双击应该将单元格数据转到下一个 UIViewController

代码如下:

var selectedCellIndexPath: NSIndexPath?
var SelectedCellHeight = CGFloat() // currently set to 480.0 tableView height
var UnselectedCellHeight = CGFloat() // currently set to 300.0 tableView unselected hight
....

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if let selectedCellIndexPath = selectedCellIndexPath {
if selectedCellIndexPath == indexPath {
return SelectedCellHeight
}
}
return UnselectedCellHeight
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var cell = tableView.dequeueReusableCellWithIdentifier("cell") as! DataViewTableViewCell!
if cell == nil {
cell = DataViewTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell")
}

// Below is the double Tap gesture recognizer code in which
// The single tap is working, double tap is quite difficult to get
// as the cell height increases on single tap of the cell

let doubleTap = UITapGestureRecognizer()
doubleTap.numberOfTapsRequired = 2
doubleTap.numberOfTouchesRequired = 1
tableView.addGestureRecognizer(doubleTap)

let singleTap = UITapGestureRecognizer()
singleTap.numberOfTapsRequired = 1
singleTap.numberOfTouchesRequired = 1
singleTap.requireGestureRecognizerToFail(doubleTap)
tableView.addGestureRecognizer(singleTap)

// Tap code to increases height of tableView cell

if let selectedCellIndexPath = selectedCellIndexPath {
if selectedCellIndexPath == indexPath {
self.selectedCellIndexPath = nil
cell.postComment.fadeIn()
cell.postCreatorPicture.alpha = 1
cell.postDate.fadeIn()
// cell.postTime.fadeIn()
cell.postCreator.fadeIn()
} else {
self.selectedCellIndexPath = indexPath
}
} else {
selectedCellIndexPath = indexPath
}
tableView.beginUpdates()
tableView.endUpdates()
}



func doubleTap() {
print("Double Tap")
}

func singleTap() {
print("Single Tap")
}

我可以让它工作的另一种方法是,如果我可以在 didSelectRowAtIndexPath 代码之外获取选定单元格的 NSIndexPath,我基本上可以使用双击来执行如果否则以获得所需的操作。你能在 tableView 默认 block 之外获取 NSIndexPath 吗?

最佳答案

成功了!

首先:定义 var customNSIndexPath = NSIndexPath() 并在 didSelectRowAtIndexPath 代码块中添加以下代码。

customNSIndexPath = indexPath
print(customNSIndexPath)

其次:从 didSelectRowAtIndexPath 中删除“点击代码以增加 tableView 单元格的高度”代码并添加到 singleTap() 函数中。并使用 doubleTap() 执行 segue。

func doubleTap() {
print("Double Tap")
performSegueWithIdentifier("MainToPost", sender: self)
}

func singleTap() {
print("Single Tap")
var cell = tableView.dequeueReusableCellWithIdentifier("cell") as! DataViewTableViewCell!
if cell == nil {
cell = DataViewTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell")
}

if let selectedCellIndexPath = selectedCellIndexPath {
if selectedCellIndexPath == customNSIndexPath {
self.selectedCellIndexPath = nil

} else {
self.selectedCellIndexPath = customNSIndexPath
}
} else {
selectedCellIndexPath = customNSIndexPath
}
tableView.beginUpdates()
tableView.endUpdates()
}

这就是你工作到很晚却不 sleep 的方式。这是最容易做的事情。谢谢

注意:如果有人有更好的解决方案或者这个在某些 xyz 情况下是错误的,请发表评论。如果你的更好,那真的会帮助其他人。

关于ios - 检测双击和单击 UITableViewCell 以执行两个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34702700/

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