UITableViewCell中的UITextView可防止segue

时间:2016-07-02 10:41:27

标签: ios iphone uitableview uitextview segue

我有很多UITableViewCells,主要由UITextViews组成。

现在的问题是,当点击一个单元格时,它不会启动-didSelectRowAtIndexPath:

这使我很难能够转向另一个VC。

我尝试了很多东西,其中一个是添加点击手势识别器,然后尝试使用-presentViewController:手动删除我也遇到了一些问题。有没有更通用,更简单的方法来做到这一点?我还需要将一些值传递给我将要显示的viewController。

修改

这就是我尝试使用手势的方法:

func tap(sender: UITapGestureRecognizer) {

    let tapLocation = sender.locationInView(self.tableView)

    let indexPath = self.tableView.indexPathForRowAtPoint(tapLocation)

    let VC1 = self.storyboard!.instantiateViewControllerWithIdentifier("showPushID")
    let navController = UINavigationController(rootViewController: VC1)
    self.presentViewController(navController, animated:true, completion: nil)

上面使用上面的方法有效,但我不知道如何将参数传递给控制器​​上的某些变量。

此方法:

    let destinationVC = showPushNotificationMessage()
    destinationVC.pushMessage = "test"
    destinationVC.dateOpened = "test"


    presentViewController(destinationVC, animated: true, completion: nil)

给我这个错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

1 个答案:

答案 0 :(得分:2)

它非常简单的家伙:)。方法instantiateViewControllerWithIdentifier会返回UIViewController,因此如果您想访问UIViewController的变量,只需要进行类型转换即可返回如下所示的类型。

如何将数据传递到viewcontroller

let destinationVC = self.storyboard!.instantiateViewControllerWithIdentifier("showPushID") as! YourDestinationViewController
destinationVC.pushMessage = "test"
destinationVC.dateOpened = "test"
let navController = UINavigationController(rootViewController: destinationVC)
self.presentViewController(destinationVC, animated:true, completion: nil)

不确定在单元格上使用TextView的目的,但是您可以为CustomTableCell创建委托方法然后点击,您可以调用您的委托方法,按照步骤

创建委托方法

@objc protocol MyCustomCellDelegate
{
    func textViewTapped(cell : MyCustomTableViewCell)
}

自定义表格查看单元格

class MyCustomTableViewCell: UITableViewCell
{
@IBOutlet weak var myTextView : UITextView!
weak var delegate : MyCustomCellDelegate?

override func awakeFromNib() {
    super.awakeFromNib()
    myTextView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tap(_:))))
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
}

func tap(sender: UITapGestureRecognizer) {
    self.delegate?.textViewTapped(self)
}
}

在您的ViewController中继承MyCustomCellDelegate,就像使用UITableViewDelegate一样 并将委托方法写入viewcontroller

func textViewTapped(cell: MyCustomTableViewCell)
{
    let vc = self.storyboard!.instantiateViewControllerWithIdentifier("myDestView")
    let navController = UINavigationController(rootViewController: vc)
    self.presentViewController(navController, animated:true, completion: nil)
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

中设置单元格委托
cell.delegate = self

访问您的手机

let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier") as! AssessmentTableViewCell

快乐编码:)