Сенсорные события для UITableview

У меня есть 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];
}

2 ответа

Решение

Если твой UIView выше вашего UITableViewтогда все сенсорные события попадут в UIView и ваш UITableView не будет прокручивать Вам нужно отключить взаимодействие для вашего самого популярного `UIView ~

Когда вам нужно создать специализированный UITableView Вы почти всегда лучше, используя UIViewController который содержит UITableView а не копаться в UITableView иерархия, если это вообще возможно. Apple делает довольно много вещей в иерархии табличных представлений, что делает добавление ваших собственных пользовательских представлений к ним часто ошибочным. Итак, краткий ответ: не вставляйте свои собственные представления в иерархию tableView.

На самом деле, я почти никогда не использую UITableViewController подкласс больше. Я всегда чувствую, что мне нужно настроить контроллер представления так, чтобы его было нелегко UITableViewController - например, создание представления для наложения tableView, как вы делаете. Вместо этого создайте свой контроллер следующим образом:

@interface MyViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@property (nonatomic,strong) IBOutlet UITableView *tableView

@end

Если вы используете Interface Builder, перетащите свой tableView в представление контроллера представления и установите делегат и источник данных для владельца представления. Или вы можете сделать то же самое в коде через viewDidLoad метод. В любом случае, в этот момент вы можете обращаться с контроллером представления точно так же, как если бы это был UITableViewController, с дополнительным преимуществом возможности выполнять такие вещи, как вставка представлений в self.view без дела идет ужасно плохо.

Другие вопросы по тегам