swift UIViewController用于自定义单元格中的按钮
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift UIViewController用于自定义单元格中的按钮相关的知识,希望对你有一定的参考价值。
我有一个自定义表格视图单元格,它有一个标签视图。我添加了tapGesture以在单击该视图时调用函数。目前我的自定义视图单元格在它自己的swift文件中。我添加了以下代码,以便在点击该标签时启用“共享扩展”。
CustomCellView.swift
10 myLabel.isUserInteractionEnabled = true
11 let tap = UITapGestureRecognizer(target: self, action: #selector(tapLabelGesture))
12 myLabel.addGestureRecognizer(tap)
13 func tapLabelGesture() {
14 print("Clicked on Label ")
let url="www.google.com"
15 let activityVC = UIActivityViewController(activityItems: [url], applicationActivities: nil)
16 activityVC.popoverPresentationController?.sourceView = self.view
17 self.present(activityVC, animated: true, completion: nil)
18 }
我在第16行获得了self.view的编译错误,而在self.present()中获得了17。问题是如何为弹出窗口提供视图?
这个代码我用于另一个视图(没有表视图或单元格)作为测试,它工作正常。所以我正在尝试为tableview / cell做同样的技术。我该如何解决这个问题?任何帮助表示赞赏。
对于第16行:
你得到一个错误,说你的班级CustomCellView
没有成员view
,因为你的类是UITableViewCell
的子类而不是UIViewController
因为UIViewController
有这个属性而你的CustomCellView
有contentView
。
对于第17行:
同上,你的类不是UIViewController
的子类,这就是为什么你不能使用self.present
。
解:
而不是使用UITapGestureRecognizer
你可以使用UIButton
,你可以放在UILabel
和你的UIViewController
类添加button.tag
和button.addTarget
在你的cellForRowAt
方法。
然后,您可以在按钮方法中添加代码并显示UIActivityViewController
。
希望这会有所帮助。
正如@DharmeshKheni所提到的,你不能像UITableViewCell
那样使用UIViewController
的子类。它不提供view
属性和present
方法。
回答你的问题,你可以在CustomCellView
中存储一个闭包:
var onLabelTappedCallback: (() -> Void)?
在你的选择器中调用它:
@objc private func tapLabelGesture() {
onLabelTappedCallback?()
}
最后在cellForRowAt
方法中实现:
cell.onLabelTappedCallback = {
print("Label tapped")
//Present additional vc
}
此解决方案也适用于UIButton
。
我从这个帖子中获得了更多关于SO的想法,how to recognize label click on custom UITableViewCell - Swift 3通过扩展,我能够解决这个问题。
以上是关于swift UIViewController用于自定义单元格中的按钮的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中使用 animateWithDuration 自定义 UIViewController 转换
关闭一个自定义弹出窗口UIViewController并立即显示另一个自定义弹出窗口UIViewController -SWIFT
Swift - iOS 9:如何在 iOS 9 中呈现具有自定义大小的 UIViewController? [复制]
将自定义 UITableViewCell 从 nib 加载到 Swift 中的 UIViewController
除了 AppDelegate 和 UIViewController 之外的一个类中的 GIDSignInDelegate 使用示例,用于 swift 中的 Google 身份验证