3

UITableViewCell 变得无响应这是一个非常不同的问题,但解决方案非常不同。

我的 tableView 是 UIViewController 中的子视图,最初工作正常,我可以选择表中的各个行。However, I have created my own popup when a row is selected (the popup is a UIView) that appears towards the bottom of the screen. 在弹出这个窗口时,我还创建了另一个 UIView,它覆盖了弹出窗口后面的屏幕,它使背景变暗。发生的第三件事是我创建了一个 UITapGestureRecogniser 来跟踪用户的点击,如果他们在 UIView 之外点击,则删除两个 UIView 和 TapGestureRecogniser 并调用 deselectRowAtIndex... 方法。

但是,此时我无法使用 tableView,因为我希望能够在 tableView 中选择不同的字符串并再次出现弹出窗口(弹出窗口最终将包含使用户能够移动到不同的链接视图控制器)。

我试图重新加载数据,删除 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];*/



    }
}

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

4

2 回答 2

1

解决了!很抱歉浪费您的时间。这是手势识别器的错误删除方法。我换了

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

[self.view removeGestureRecognizer:_tapDetector] 

因为 UIGestureRecogniser 徘徊并阻碍了 tableView !

于 2014-06-02T21:58:07.050 回答
0

NSLog()如果你在那个 remove 方法的块内设置一个断点else,你会进入它吗?

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

于 2012-10-14T00:09:26.423 回答