iOS 9:在故事板/xib 中设置了手势识别器,以添加到多个视图(不起作用)

Posted

技术标签:

【中文标题】iOS 9:在故事板/xib 中设置了手势识别器,以添加到多个视图(不起作用)【英文标题】:iOS 9: Gesture Recognizer was setup in a storyboard/xib to be added to more than one view (not working) 【发布时间】:2015-10-11 13:43:00 【问题描述】:

使用 ios 9 并遇到UITapGestureRecognizer 的问题。我有一个带有UITableView 的 ViewController-A。我添加了一个带有 textLabel 的 tableViewCell。我想在 textLabel 上实现点击。因此,如果我点击 textLabel - 它应该在控制台上打印或执行其他任何操作

问题: TapRecognizer 不工作。得到以下错误:

以下是我所做的:

1) 在 textLabel 上添加了一个“UITapGestureRecognizer”(来自 StoryBoard)。为 textLabel 启用了用户交互(即使现在也出现错误)

2) 以下是 IBAction:

@IBAction func nameTap(sender: UITapGestureRecognizer) 
   print("a")

3) CellForRowAtIndexPath

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! ThirdViewCell!
    cell.nameLabel?.text = "XYZ"

    let nameTapRecognizer = UITapGestureRecognizer(target: self, action: Selector("nameTap:"))
    nameTapRecognizer.cancelsTouchesInView = false
    cell.nameLabel?.addGestureRecognizer(nameTapRecognizer)
    return cell

附注: 1)这在iOS 8中工作。我已经检查过..没有重复(整个文件中只有一个点击识别器并且它链接到textLabel)

2) 我不想使用 didSelectRowAtIndexPath 方法,因为我需要为 tableViewCell 中的更多 textLabels 实现 TapGestureRecognizer。

【问题讨论】:

水龙头不工作..实现代码后没有任何反应..我已经截取了错误的屏幕截图并发布在问题中 去掉你在 Storyboard 中添加的 UITapGestureRecognizer。它只能在您的cellForRowAtIndexPath 中设置。 【参考方案1】:

您是否看到错误控制台Label,以及UserInteractionEnabled = NO; 的属性参见屏幕截图

试试这个

let nameTapRecognizer = UITapGestureRecognizer(target: self, action: Selector("nameTap:"))
nameTapRecognizer.cancelsTouchesInView = false
cell.nameLabel?.tag = indexPath.row // add this 
nameTapRecognizer.numberOfTapsRequired = 1 // add this 
nameTapRecognizer.delegate =self
cell.nameLabel?.userInteractionEnabled = true  // add this 
cell.nameLabel?.addGestureRecognizer(nameTapRecognizer)

// method
func nameTap(gesture: UITapGestureRecognizer) 
let indexPath = NSIndexPath(forRow: gesture.view!.tag, inSection: 0)
let cell = tableView.cellForRowAtIndexPath(indexPath) as UITableViewCell

// Do whatever you want.

【讨论】:

使用任何手势,例如使用基于情节提要的其他方式,我想你都尝试过 一个后续问题:在 nameTap 我想对 ViewController 执行一个 segue - B..我已经输入了以下命令: performSegueWithIdentifier("segueToVCB", sender: self)...它工作正常..唯一的问题是我想将行号发送到 VC-B..我知道 prepareForSegue 是如何工作的...但不确定如何发送行号..我看到您使用了“标签”但不确定如何在“prepareForSegue”中使用它......如果你能告诉我会很棒

以上是关于iOS 9:在故事板/xib 中设置了手势识别器,以添加到多个视图(不起作用)的主要内容,如果未能解决你的问题,请参考以下文章

ios swift故事板和xibs

使用点击手势识别器时,IOS swift应用程序无法正常工作

故事板+模态搜索+记忆

启动图像或启动 xib / 故事板?

如何使用 iOS 故事板创建具有两个嵌套 tableview 单元格 xib 的单个 tableview?

没有 Xib 和故事板的旧应用程序。使ios9兼容