调用setHidden函数时,TableView不会消失

时间:2012-07-10 20:01:57

标签: iphone uitableview uigesturerecognizer

我,

在我的handleLongPress函数(cf:手势识别器)中,我尝试使TableView出现,最后,当手势被删除时,消失。为此,我使用手势识别器状态属性以及tableView的setHidden函数。不幸的是,tableView在出现之后并没有消失。我不明白为什么。如果你有一个想法,我会很感激。

这是我的代码:

-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
{
    UITableView *tableView = [[UITableView alloc]initWithFrame:CGRectMake(gestureRecognizer.view.center.x - 10, gestureRecognizer.view.center.y - 10, 100, 100)];

    tableView.layer.cornerRadius = 20.0;
    tableView.layer.frame = CGRectInset(tableView.layer.frame, 20, 20);


    if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
    [self addSubview:tableView];
    }

    if(gestureRecognizer.state == UIGestureRecognizerStateEnded)
    {
        [tableView setHidden:YES];
    }
}

2 个答案:

答案 0 :(得分:2)

您每次都在重新创建表格视图,无论是否将其添加到屏幕上,您需要在属性或ivar中捕获您的tableview,然后从那里开始,我假设您只想要一个表视图,以下将解决问题

在你的界面中有一个tableView属性

@interface ..
{

}
@property(nonatomic, retain) UITableView *tableView;
@end

在您的实施中合成这个......

    -(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
    {
       if(tableView==nil)
      {
        self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(gestureRecognizer.view.center.x - 10, gestureRecognizer.view.center.y - 10, 100, 100)] autorelease];
      [self addSubview:self.tableView];
     }

        self.tableView.layer.cornerRadius = 20.0;
        self.tableView.layer.frame = CGRectInset(tableView.layer.frame, 20, 20);


        if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
           [self.tableView setHidden:false];
        }

        if(gestureRecognizer.state == UIGestureRecognizerStateEnded)
        {
            [self.tableView setHidden:YES];
        }
   }

有关属性的更多信息,请检查this 希望能帮助到你.. 丹尼尔

答案 1 :(得分:0)

if(gestureRecognizer.state == UIGestureRecognizerStateEnded)
{
    [tableView removeFromSuperview];
}

因为您要添加一个tableview,所以应该删除它。否则,将tableview添加到你的longPressGestureRecognizer方法中,并根据需要隐藏/取消隐藏