我正在进行扫雷游戏,我想在用户长时间点击游戏牌的牌时添加旗帜。 我已经实现了这段代码:
对于游戏板中的每个按钮:
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressTap:)];
longPress.minimumPressDuration = 1.0f;
[self.button addGestureRecognizer:longPress];
在self中,方法 longPressTap:
- (void)longPressTap:(Tile *)sender {
if (sender.block.marking == MARKING_FLAGGED) {
// if already a flag I mark as a blank tile, with color defined for gameboard
sender.backgroundColor = UIColorFromRGB(0x067AB5);
sender.block.marking = MARKING_BLANK;
self.flagCount++;
}
else{
// if it's not a flag I mark as a flag and set the flag image for the tile
[sender setBackgroundImage:[UIImage imageNamed:IMAGE_NAME_FLAG] forState:UIControlStateNormal];
sender.block.marking = MARKING_FLAGGED;
self.flagCount--;
}
}
当然,self是我的 UIGestureRecognizerDelegate 。 但是,当我尝试长按一个磁贴时,应用程序崩溃并发出此错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILongPressGestureRecognizer block]: unrecognized selector sent to instance 0x8cf2b00'
我该怎么办?我从一开始就使用Obj-C编程,所以如果有人能帮助我并解释我做错了什么,我将非常感激。
答案 0 :(得分:2)
- (void)showOptions:(UILongPressGestureRecognizer*)sender{
UIButton *btn = (UIButton*)sender.view;
NSLog(@"view tag %d",sender.view.tag);
if (sender.state == UIGestureRecognizerStateEnded)
{
}
else if (sender.state == UIGestureRecognizerStateBegan)
{
[self.bubbleDelegate showOptionsForMessage:btn];
}
}
答案 1 :(得分:0)
* 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [UILongPressGestureRecognizer block]:无法识别的选择器发送到实例0x8cf2b00'
从这个错误中可以看出,由于[UILongPressGestureRecognizer block]
,应用程序崩溃了。 UILongPressGestureRecognizer
没有名为block
的方法,因此崩溃了。
- (void)longPressTap:(Tile *)sender {
}
正如您在实现sender
中所期望的那样,此方法不是Tile
对象,它实际上是UILongPressGestureRecognizer
。
预期的方法是
- (void)longPressTap:(UILongPressGestureRecognizer *)sender
{
}
答案 2 :(得分:0)
我理解你的问题。我现在可以在论证中找到“Tile”。
- (void)longPressTap:(Tile *)sender
使用这可能有帮助
- (void)longPressTap:(UILongPressGestureRecognizer *)sender
并且不要使用直接平铺。直接使用Tile对象并创建此对象的全局对象。