我有一个自定义动态表格视图单元格,其标签已添加了已识别的点按手势。当用户点击标签时,而不是单元格中的任何其他位置,我想呈现一个视图控制器。
Instagram应用程序具有此功能。 IE浏览器。当你点击喜欢时,它会带你到一个喜欢的表视图,当你点击评论时,它会显示你的评论表视图。这是我想要的相同体验。
我不打算使用didSelectRow,因为它有点击败了让特定目标区域点击以显示新视图控制器的目的。
那么,如何从UITableViewCell的子类中的轻敲手势识别器呈现视图控制器?
更新:
我将一个闭包传递给我的自定义TableViewCell,当按下该按钮时,该闭包被成功调用。但是我被困在TableView中并且无法将信息传递给我想要呈现的下一个View Controller。而且我也无法执行segue:\
// 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)
}
答案 0 :(得分:0)
创建单元格时,将块传递给它。这是button
的处理程序。
按下按钮时,调用该块
您可以将块保存为UITableViewCell
的子类的属性。
在tableViewCell类中,添加一个属性:
class CustomTableViewCell: UITableViewCell {
open var completionHandler: (()->Void)?
}
在包含tableView的viewController中:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = CustomTableViewCell()
cell.completionHandler = {
() -> Void in
let newViewController = UIViewController()
//configure the VC here base on the indexPath
self.present(newViewController, animated: true, completion: nil)
}
return cell
}