如何使用自定义表格视图单元格中识别的点击手势从UILabel呈现视图控制器?

时间:2017-04-04 22:20:01

标签: ios uitableview swift3 uitapgesturerecognizer

我有一个自定义动态表格视图单元格,其标签已添加了已识别的点按手势。当用户点击标签时,而不是单元格中的任何其他位置,我想呈现一个视图控制器。

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)
}

1 个答案:

答案 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
}