UITableView变得无法响应

时间:2012-10-13 23:54:57

标签: xcode uitableview css-selectors subviews

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];*/



    }
}

我真的希望答案就在这里,非常简单,并提前感谢您抽出时间阅读本文。

2 个答案:

答案 0 :(得分:1)

解决了!抱歉浪费你的时间。这是gestureRecogniser的错误删除方法。我换了

[_tapDetector removeTarget:self action:@selector(removeOverHead:)] 

[self.view removeGestureRecognizer:_tapDetector] 

因为UIGestureRecogniser挥之不去并阻碍了tableView !!

答案 1 :(得分:0)

如果您在该删除方法的NSLog()块中粘贴断点或else,您是否进入其中?

听起来你的if语句可能已关闭。您应该使用CGRectContainsPoint()。但是,如果我理解正确,当用户点击调光背景视图时,您试图解除所有内容。您可以将此视图设为按钮,也可以将触摸的视图指针与指向背景视图的指针进行比较。