0

UIViewサブクラスのオーバーレイがありUITableviewます。問題は、テーブルビューをスクロールできないことです。touchesBegan、、をオーバーライドしようとしましtouchesMovedtouchesEnded。次に、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を含むを使用する方がよいでしょう。Apple は tableview 階層でかなりのことを行っているため、独自のカスタム ビューを追加するとうまくいかないことがよくあります。したがって、短い答えは次のとおりです。独自のビューをtableView階層に挿入しないでください。UITableViewUITableView

実際、UITableViewControllerサブクラスを使用することはほとんどありません。UITableViewController私はいつも、あなたがやっているようにtableViewをオーバーレイするビューを作成するなど、から簡単にサポートされない方法でView Controllerをカスタマイズする必要があることに気づきます。代わりに、次のようにコントローラーを作成します。

@interface MyViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@property (nonatomic,strong) IBOutlet UITableView *tableView

@end

Interface Builder を使用している場合は、tableView をビュー コントローラーのビューにドロップし、デリゲートとデータソースをビューの所有者に設定します。または、メソッドを介してコードで同じことを行うことができますviewDidLoad。どちらの場合でも、この時点で、View Controller を UITableViewController であるかのように扱うことができます。さらに、ビューを挿入するなどの操作を、self.viewひどく失敗することなく実行できるという追加の利点があります。

于 2013-02-04T17:33:51.043 に答える