UITableViewCell becomes unresponsive这是一个非常不同的问题,有一个非常不同的解决方案。
我的tableView是UIViewController中的一个子视图,最初工作正常,我可以选择表中的各个行。但是,当选择了一行(弹出窗口是UIView)时,我已经创建了自己的弹出窗口,它出现在屏幕的底部。当这个弹出窗口我还创建了另一个UIView,它覆盖了弹出窗口后面的屏幕,它使背景变暗。第三件事是我创建一个UITapGestureRecogniser来跟踪用户的点击,如果他们在UIView外面点击,那么两个UIViews和TapGestureRecogniser被删除并调用deselectRowAtIndex ...方法。
然而,正是在这一点上我无法使用tableView,因为我希望能够在tableView中选择一个不同的字符串并再次出现弹出窗口(弹出窗口最终将包含将使用户能够使用的链接移动到不同的viewControllers)。
我试图重新加载数据,删除tableview并替换它,编辑didSelectRowAtIndex,删除deselectRowAtIndex方法,但是我尝试的任何东西似乎都无法工作,我在stackoverflow上找不到任何东西,因为我的问题似乎相当具体(虽然如果有什么东西我道歉)。
我将添加我的代码的一些部分,但是,我不确定问题出在哪里,我可能没有复制正确的部分。
删除开销是tapGesture
中的选择器方法-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(_popOverView == nil)
{
_popOverView = [[UIView alloc]initWithFrame:CGRectMake(20, 200, 280, 150)];
_popOverView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"wood.jpeg"]];
}
if(_mask == nil)
{
_mask = [[UIView alloc] initWithFrame:self.view.frame];
[_mask setBackgroundColor:[UIColor colorWithWhite:0.0 alpha:0.78]];
}
if (_tapDetector == nil)
{
_tapDetector= [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(removeOverHead:)];
}
[self.view addSubview:_mask];
[self.view addSubview:_popOverView];
[self.view addGestureRecognizer:_tapDetector];
}
-(void) removeOverHead:(UITapGestureRecognizer*) sender
{
CGPoint locationOfTap = [_tapDetector locationInView:self.view];
if (locationOfTap.y < (200 + 150) && locationOfTap.y > 200 && locationOfTap.x > 20 && locationOfTap.x < (20 + 280) ) {
NSLog(@"%f,%f",[_tapDetector locationInView:self.view].x,[_tapDetector locationInView:self.view].y);
}
else
{
[_mask removeFromSuperview];
[_popOverView removeFromSuperview];
[_tapDetector removeTarget:self action:@selector(removeOverHead:)];
/*this idea doesn't work :(
[self.tableView removeFromSuperview];
[self.view addSubview:_tableView];*/
}
}
我真的希望答案就在这里,非常简单,并提前感谢您抽出时间阅读本文。
答案 0 :(得分:1)
解决了!抱歉浪费你的时间。这是gestureRecogniser的错误删除方法。我换了
[_tapDetector removeTarget:self action:@selector(removeOverHead:)]
带
[self.view removeGestureRecognizer:_tapDetector]
因为UIGestureRecogniser挥之不去并阻碍了tableView !!
答案 1 :(得分:0)
如果您在该删除方法的NSLog()
块中粘贴断点或else
,您是否进入其中?
听起来你的if语句可能已关闭。您应该使用CGRectContainsPoint()
。但是,如果我理解正确,当用户点击调光背景视图时,您试图解除所有内容。您可以将此视图设为按钮,也可以将触摸的视图指针与指向背景视图的指针进行比较。