0

我有一个UIView覆盖子类的UITableview. 问题是,我无法让表格视图滚动。我尝试过覆盖touchesBegan, touchesMoved, touchesEnded. 然后我尝试覆盖 hittest 但这似乎没有影响。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:self];
    NSLog(@"SMTable.touches began %@",NSStringFromCGPoint(touchPoint));
    [super touchesBegan:touches withEvent:event];

}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:self];
    NSLog(@"SMTable.touches moved %@ for :%p",NSStringFromCGPoint(touchPoint),touch.view);
    [super touchesMoved:touches withEvent:event];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:self];
    NSLog(@"SMTable.touches ended %@",NSStringFromCGPoint(touchPoint));
    [super touchesEnded:touches withEvent:event];
}
- (void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent*)event {
    [super touchesCancelled:touches withEvent:event];
}
- (UIView*) hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    //NSLog(@"SMTable.hitTest %@",NSStringFromCGPoint(point));
    return [super hitTest:point withEvent:event];
}
4

2 回答 2

1

如果您在您UIView的上方UITableView,则所有触摸事件都将落在其中UIView并且您UITableView将不会滚动。您需要为最顶层的 `UIView 禁用交互

于 2013-02-04T17:21:54.990 回答
0

当您需要创建一个专业UITableView时,您几乎总是最好使用UIViewController包含 a 的 a而不是在可能的情况下在层次结构中UITableView四处乱窜。UITableViewApple 在 tableview 层次结构中做了很多事情,这使得向其中添加您自己的自定义视图经常出错。所以,简短的回答是:避免将您自己的视图插入到 tableView 层次结构中。

事实上,我几乎不再使用UITableViewController子类了。我总是发现自己需要以一种不容易支持的方式自定义视图控制器UITableViewController——例如创建一个视图来覆盖 tableView。相反,像这样创建你的控制器:

@interface MyViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@property (nonatomic,strong) IBOutlet UITableView *tableView

@end

如果您使用的是 Interface Builder,请将您的 tableView 放入视图控制器的视图中,并将委托和数据源设置为视图的所有者。viewDidLoad或者您可以通过该方法在代码中执行相同的操作。在任何一种情况下,此时您都可以将视图控制器完全视为 UITableViewController 并具有额外的好处,即能够执行诸如插入视图之类的self.view事情而不会出现可怕的错误。

于 2013-02-04T17:33:51.043 回答