通过触摸内部激活uitableview

时间:2011-11-20 11:55:50

标签: iphone objective-c

我已通过

禁用了我的tableview
[self.tableView setScrollEnabled:NO];

[self.tableView setAllowsSelection:NO];

我想点击表格中的任意位置重新激活表格。 我能这样做吗?

4 个答案:

答案 0 :(得分:3)

您可以使用上述UITapGestureRecognizer

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showTable:)];
[tapGesture setNumberOfTapsRequired:1];
[self.tableView addGestureRecognizer: tapGesture];
[tapGesture release];

和行动

-(void) showTable:(UITapGestureRecognizer *)recognizer {
    if (recognizer.state == UIGestureRecognizerStateEnded) {
        UIView *table=recognizer.view;
        if ([table isKindOfClass: [UITableView class]]) {
            UITableView *tab=(UITableView *)table;
            if (![tab isScrollEnabled]) {
                [tab setScrollEnabled:YES];
                [tab setAllowsSelection:YES];
            }
        }
    }
}

(未经测试) 希望这会有所帮助。

答案 1 :(得分:1)

您可以使用UITapGestureRecognizer(非常简单,各处都有教程)或UIView子类(放在表格视图之上),只要您将自己从视图层次结构中移除触摸它(touchesBegan:withEvent:touchesEnded:withEvent:)。

答案 2 :(得分:1)

如果你的UITableView全屏,那么:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {   
    //make UITableView active here
}

如果不是,您应该执行以下操作:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch* touch = [touches anyObject];
    if(CGRectContainsPoint(yourTableView.frame, touch)) {
        //make UITableView active here
    }
}

为了做到这一点,你必须确保自己是第一个响应者,你可以通过包括

来做到这一点。
- (BOOL)canBecomeFirstResponder {
    return YES;
}

在你的视图控制器和某个地方调用

[self becomeFirstResponder];

答案 3 :(得分:0)

您可以使用UITapGestureRecognizer。