Сенсорные события для 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
без дела идет ужасно плохо.