Swift-在自定义单元格中添加长按手势识别器

问题描述 投票:2回答:2

因此,我在表视图中有一个自定义单元格类和一个针对我的单元格的xib文件,我想向该自定义单元格添加长按识别键。

我试图将长按识别器拖放到xib文件中的单元格,使文件的所有者成为笔势的代表,然后将其从文档轮廓“拖放”到自定义类swift文件。我还将UIGestureRecognizerDelegate添加到自定义单元格类中。

现在,当我运行该应用程序时,出现线程1:信号SIGABRT错误,说实话,我也不知道为什么。这是我第一次使用手势识别器,如果有明显的错误或我应该做的事情,对不起。

任何有关进行方法的建议都会受到赞赏。

编辑:正如Logan所建议的,我撤消了所做的所有工作并遵循他的步骤。我的自定义类中的代码现在如下所示:

@IBAction func pressed(sender: AnyObject) {

    func handleLongPress(sender: UILongPressGestureRecognizer) {
        if sender.state == .Began {
            println("Received longPress!")
        }
    }
}

但是我仍然得到错误。我注意到的是,如果我仅将手势添加到xib文件并运行应用程序,就会收到错误消息。我不知道这是否是因为我尚未将其连接到自定义类文件,但我想我只是将它扔在那里了。

编辑2:将我的代码更改为此后:

@IBAction func pressed(sender: UILongPressGestureRecognizer) {
    if sender.state == .Began {
        println("Received longPress!")
    }
}

我仍然收到错误。

我不知道是否清楚,但是我什至无法加载屏幕,它立即崩溃了。所以我认为这是一个委托/参考问题,这是我的参考文献的方式:

1)我将xib文件所有者的类设置为自定义单元类。2)我将手势识别器拖到单元格上。3)我将手势对象拖到文件所有者,以便文件所有者为其委托。4)我在自定义类中从上面添加了代码。5)我将手势对象拖动到文件所有者,以便在自定义类中将手势“连接到代码”。

这些都是我的全部步骤,正如我所说,我怀疑某个地方存在委托问题。

uitableview swift uigesturerecognizer sigabrt
2个回答
3
投票

我有类似的问题。问题是,当您将手势识别器添加到xib文件时,存在多个对象(您的表视图单元格和手势识别器),而表视图数据源无法处理此问题。该错误正确地描述了问题。我将表视图单元格移到了主故事板,而不是将其保存在单独的xib文件中来解决此问题。

原因:'为标识符(CELL)注册的无效笔尖-笔尖必须仅包含一个顶级对象,该对象必须是UITableViewCell实例'

解决您问题的另一种方法是用类似以下代码的方式创建手势识别器:

self.tap = [[UITapGestureRecognizer分配] initWithTarget:self操作:@selector(tapFired:)];

在awakeFromNib中,用于自定义表格视图单元。

[我只是认为基本问题是,您不能在表视图单元xib中添加手势识别器,然后再使表视图数据源加载该单元。


0
投票

1)我将xib文件所有者的类设置为定制单元格类。

一开始你是错的。 UITableViewCellUIView的子类。因此,您应该将View设置为自定义单元格类,而不是文件的所有者。文件的所有者应为NSObject。

如果文件的所有者是UIViewController的子类,则只能将其所有者设置为自定义类。

© www.soinside.com 2019 - 2024. All rights reserved.