我有很多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
答案 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
快乐编码:)