0

週の 7 日間を表す 7 つの tableViews を持つビューがあります。各 tableView は、0 から 6 までのタグで初期化されます。適切な tableView にアクセスできるように、セルに longPressure 認識エンジンを作成しました。

- (IBAction)longPress:(UIGestureRecognizer *)sender {
    self.clickedPoint = [sender locationInView:self.view];

    // get most down subView user clicked
    UIView *clickedSubView = [self.view hitTest:self.clickedPoint withEvent:nil];

    if( [clickedSubView.superview isKindOfClass:[customCell class]] ) {

        // get selected tableView
        UITableView *selectedTableView = (UITableView*)clickedSubView.superview.superview;

        NSLog(@"Selected tag: %d", selectedTableView.tag);
    }
}

セルを押すと、タグが正しく表示されます。問題は、tableView 内で行を移動するときです。tableView と longPress で moveRowAtIndexPath: を実行すると、moveRow を作成した tableView のタグは、常に別の tableView の最後の longPress のタグを取得します。

例:

タグ 2 のテーブルで RowRow を移動します。次に、タグ 5 の longPress テーブルだけです。次に、タグ 2 の longPress テーブルに戻りますが、今回はタグ = 5 (直前のもの) をログに記録します。タグ 1 の longPress テーブルの場合、longPress の「タグ 2 のテーブル」(と思われる) に再度戻り、タグ 1 をタグ 2 のはずの場所に記録します。

beginUpdates によりタグが失われ、リロードする必要があることを読みました。だから私はこれを試しました:

// reload the tableView after moveRowAtIndexPath method
selectedTableView reloadData];

// also tried refresh the view that contains all the tableViews
[[self getWeekView] setNeedsDisplay];

// and also tried to set the tag again after moveRowAtIndexPath method
selectedTableView.tag = index;

何も機能しません。また、clickedSubView に何かが起こっているのか、正しい hitTest ビューを取得していたのか疑問に思っていましたが、色付きの境界線でテストしたところ、moveRowAtIndexPath メソッドの後に間違ったタグを付けただけで、正しいビューが取得されました。

皆さん、ありがとうございました!

4

2 に答える 2

1

テーブルビューにカスタムセルを使用している場合は、カスタムセルにラベルを1つ追加するか、そのタグを表示したくない場合は非表示のままにしてください。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath メソッドでデータを含むテーブルビュー セルをロードするときは、タグ ラベルを設定するだけなので、このタグの問題は発生しません。

于 2013-07-25T09:33:50.613 に答える
0

長押しされたテーブル ビューを取得する場合は、ジェスチャ レコグナイザーを (セルではなく) テーブル ビュー自体に追加します。次に、でビューをリクエストできますsender.view。必要に応じて、ヒット検出を実行して、実際に長押しされたビューを取得できます。

于 2013-07-25T09:32:50.480 に答える