Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Uitableview Swift-在自定义单元格中添加长按手势识别器_Uitableview_Swift_Uigesturerecognizer_Sigabrt - Fatal编程技术网

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

Uitableview Swift-在自定义单元格中添加长按手势识别器,uitableview,swift,uigesturerecognizer,sigabrt,Uitableview,Swift,Uigesturerecognizer,Sigabrt,因此,我在tableview中为我的单元格创建了一个自定义单元格类和一个xib文件,我想在自定义单元格中添加一个长按识别 我尝试将长按识别器拖放到xib文件中的单元格中,使文件的所有者成为手势的代理,然后将其从文档大纲“拖放”到自定义类swift文件中。我还将UIgestureRecognitzerDelegate添加到自定义单元格类中 现在,当我运行应用程序时,我得到了一个线程1:SIGABRT错误信号,老实说,我不知道为什么。这是我第一次使用手势识别器,如果有明显的错误或我应该做的事情,我非

因此,我在tableview中为我的单元格创建了一个自定义单元格类和一个xib文件,我想在自定义单元格中添加一个长按识别

我尝试将长按识别器拖放到xib文件中的单元格中,使文件的所有者成为手势的代理,然后将其从文档大纲“拖放”到自定义类swift文件中。我还将UIgestureRecognitzerDelegate添加到自定义单元格类中

现在,当我运行应用程序时,我得到了一个线程1:SIGABRT错误信号,老实说,我不知道为什么。这是我第一次使用手势识别器,如果有明显的错误或我应该做的事情,我非常抱歉

如有任何关于如何进行的建议,将不胜感激

编辑:按照洛根的建议,我解开了所有已经完成的事情,并按照他的步骤进行操作。我的自定义类中的代码现在如下所示:

@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) 我将手势对象拖到文件所有者,以便手势在自定义类中“连接到代码”


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

我也有类似的问题。问题是,在向xib文件添加手势识别器时,存在多个对象(tableview单元格和手势识别器),tableview数据源无法处理此问题。错误正确地描述了问题。为了解决这个问题,我将tableview单元格移动到了主情节提要,而不是将其保存在单独的xib文件中

原因:“为标识符(单元格)注册的nib无效-nib必须仅包含一个顶级对象,该对象必须是UITableViewCell实例”

解决此问题的另一个方法是使用以下代码创建手势识别器:

self.tap=[[UITapgestureRecognitizer alloc]initWithTarget:self 操作:@selector(tapFired:)]

在自定义表视图单元格的awakeFromNib中

我认为最基本的问题是不能在表格视图单元格xib中添加手势识别器,然后让表格视图数据源加载单元格

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

你一开始就错了。
UITableViewCell
UIView
的子类。因此,应该将视图设置为自定义单元格类,而不是文件的所有者。文件的所有者应为NSObject


如果文件的所有者是
UIViewController

的子类,则只能将其设置为自定义类。请尝试将发送者切换回type id。然后在方法中编写此
if(sendor.isKindOfClass(uilongpressgesturecognizer)){//do stuff}否则{return;}
,这样您就可以看到发生了什么。您还可以
NSLog
发送什么类型的类。这可能就是为什么会出现错误——尽管我不知道为什么会出现SIG错误。有点奇怪。