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应用程序无法正常工作