gpt4 book ai didi

ios - 父 Controller 阻止子 TableView UITableViewRowAction swift

转载 作者:搜寻专家 更新时间:2023-11-01 06:32:09 25 4
gpt4 key购买 nike

我正在使用库调用 Page-Menu ( https://github.com/PageMenu/PageMenu ),它允许我在 View Controller 中添加 subview Controller 。我可以在这个 View Controller 之间滚动。在我使用 UITableView 的 subview Controller 之一中。我正在使用 UITableViewRowAction 删除单元格但是。不知道为什么,但表未检测到滑动手势。如果我禁用页面菜单滚动然后 TableView UITableViewRowAction 工作。我在谷歌搜索了很多关于这个的内容。我没有找到任何解决方案。谢谢

attached the screenshot of my app

最佳答案

在使用了一些库后,我发现问题与在 CAPSPageMenu View Controller 中禁用 ScrollView 手势识别器有关。

按照这些步骤在其中一个 subview Controller 中启用 TableView 编辑。

像这样为 PageMenu 目标子类化 UIScrollView:

class CustomScrollView : UIScrollView, UIGestureRecognizerDelegate {

override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
gestureRecognizer.cancelsTouchesInView = false
return true
}

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return ((self.delegate as! CAPSPageMenu).gestureDelegate?.gestureRecognizerShouldRecognizeSimultaneouslyWith(gestureRecognizer, otherGestureRecognizer: otherGestureRecognizer))!
}
}

然后在 CAPSPageMenu 中,替换:

让 controllerScrollView = UIScrollView()

让 controllerScrollView = CustomScrollView()

在同一个文件中声明一个协议(protocol):

@objc public protocol CustomGestureDelegate {
func gestureRecognizerShouldRecognizeSimultaneouslyWith(_ gestureRecognizer: UIGestureRecognizer, otherGestureRecognizer: UIGestureRecognizer) -> Bool
}

并将此属性添加到 CAPSPageMenu:

open weak var gestureDelegate: CustomGestureDelegate?

在这里,我将 controllerArray 作为 ViewController 中的一个属性,这样我们以后就可以用 TableView 过滤掉 View Controller 。

var controllerArray : [UIViewController] = []

然后使 ViewController 符合 CustomGestureDelegateViewController: UIViewController, CustomGestureDelegate,并在 viewDidLoad 中设置:

pageMenu!.gestureDelegate = self

ViewController(您的容器 View Controller )中实现此功能:

func gestureRecognizerShouldRecognizeSimultaneouslyWith(_ gestureRecognizer: UIGestureRecognizer, otherGestureRecognizer: UIGestureRecognizer) -> Bool {
if pageMenu?.currentPageIndex == 0 {
return (controllerArray[0] as! CustomGestureDelegate).gestureRecognizerShouldRecognizeSimultaneouslyWith(gestureRecognizer, otherGestureRecognizer: otherGestureRecognizer)
}
return true
}

您可以为其他具有 TableView 的 subview Controller 添加类似的逻辑。这里我假设只有初始 View Controller 有一个 TableView 。

通过添加以下实现使您的 subview Controller 符合 CustomGestureDelegate:

class TestTableViewController: UITableViewController, CustomGestureDelegate {
func gestureRecognizerShouldRecognizeSimultaneouslyWith(_ gestureRecognizer: UIGestureRecognizer, otherGestureRecognizer: UIGestureRecognizer) -> Bool {
let location = gestureRecognizer.location(in: self.view)
let path = self.tableView.indexPathForRow(at: location)
if path != nil {
gestureRecognizer.isEnabled = false
}
gestureRecognizer.isEnabled = true
return true
}
}

希望对你有帮助。

更新:

查看 https://github.com/LemonSpike/PageMenu查看 PageMenuDemoStoryboard 目标的演示。

关于ios - 父 Controller 阻止子 TableView UITableViewRowAction swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45709445/

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