【发布时间】:2017-04-04 22:20:00
【问题描述】:
我有一个自定义动态表格视图单元格,其标签添加了已识别的点击手势。当用户点击标签而不是单元格中的其他任何地方时,我想呈现一个视图控制器。
instagram 应用程序具有此功能。 IE。当您点击喜欢时,它会将您带到喜欢表视图,当您点击 cmets 时,它会将您显示到 cmets 表视图。这也是我想要的体验。
我不打算使用 didSelectRow,因为它有点违背了让特定目标区域点击以显示新视图控制器的目的。
那么,如何在 UITableViewCell 的子类中从轻击手势识别器中呈现视图控制器?
更新:
我正在向我的自定义 TableViewCell 传递一个闭包,当按下按钮时它会被成功调用。但是我卡在 TableView 中,无法将信息传递给我要呈现的下一个 View Controller。而且我也不能真正执行转场:\
// From UITableView
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let story = stories[indexPath.row]
if let cell = tableView.dequeueReusableCell(withIdentifier: "Fun Cell", for: indexPath) as? FunTableViewCell {
cell.configureCell(title: story.title, info: story.info)
cell.buttonAction = { [weak self] (cell) in
print("the button was pressed for \(story.title)")
self?.buttonWAsTapped(title: story.title)
}
return cell
} else {
return FunTableViewCell()
}
}
func buttonWAsTapped(title: String) {
// Need to pass something to the next View Controller... but how???
if let nextVC = UIViewController() as? DetailViewController {
nextVC.storyTitle = title
performSegue(withIdentifier: "Button Pressed", sender: self)
}
}
// Custom TableViewCell
class FunTableViewCell: UITableViewCell {
@IBOutlet weak var funLabel: FunLabel!
@IBOutlet weak var standardLabel: TappedLabel!
@IBOutlet weak var funButton: FunButton!
var buttonAction: ((UITableViewCell) -> Void)?
override func awakeFromNib() {
super.awakeFromNib()
let tap = UITapGestureRecognizer(target: self, action: #selector(readMoreTapped))
tap.numberOfTapsRequired = 1
standardLabel.addGestureRecognizer(tap)
standardLabel.isUserInteractionEnabled = true
}
@IBAction func btnPressed(sender: UIButton) {
print("Button pressed")
buttonAction?(self)
}
【问题讨论】:
-
确实可行。有什么问题?
-
如何通过在可重用的表格视图单元格中识别的点击手势呈现视图控制器?
标签: ios uitableview swift3 uitapgesturerecognizer