0

私のiPadアプリではUIButton、セルを挿入するためにドラッグアンドドロップする必要があります。ボタンをドラッグして、 touchupinside イベントでセルを挿入することができました。次のコードで動作します -

//button1 is initially placed in a view called scrollview
[button1 addTarget:self action:@selector(imageMoved:withEvent:) forControlEvents:UIControlEventTouchDragInside];

[button1 removeTarget:self action:@selector(insertcell) forControlEvents:UIControlEventTouchUpInside];

CGPoint pointfordeterminingrow;

- (IBAction) imageMoved:(UIButton *) sender withEvent:(UIEvent *) event {

    CGPoint point = [[[event allTouches] anyObject] locationInView:self.view];
    UIControl *control = sender;
    control.center = point;

    pointfordeterminingrow=point;   // point where the button is hovering now

    if ([sender state] == UIGestureRecognizerStateBegan) {

        [self.view addSubview:sender];

    }

    if ([sender state] == UIGestureRecognizerStateChanged) {

        [scrollview addSubview:sender];

    }

    if ([sender state] == UIGestureRecognizerStateEnded) {

        [scrollview addSubview:sender];

    }

}

- (int)rowAtPoint:(CGPoint)point {

    NSIndexPath* newIndexPath = [MainTableView indexPathForRowAtPoint:point];
    return newIndexPath == nil ? [items count] : newIndexPath.row;

     //items is a mutable array has the content of each cell
}

-(void)insertcell {

    int row = [self rowAtPoint:pointfordeterminingrow];

    NSIndexPath* newIndexPath = [NSIndexPath indexPathForRow:row inSection:0];

    [self insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath                 indexPathForRow:newIndexPath.row inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
}

これらのコードは、ボタンがドロップされた //touchuped メソッドが呼び出される indexpath にセルを挿入します。

私の問題は次のとおりです。

私が得る「newIndexPath」は、ボタンがドロップされる番号(テーブルビューの行)です。この「insertcell」メソッドは、テーブルビューがスクロールされていない状況で正常に機能します。

TableView がスクロールされると、「rowAtPoint」はインデックスパス ウィッチの行である数値を返します。

つまり、ボタンがインデックスパス 58 の上にドロップされ、(スクロールによって) 50 個のセルが上に隠されている場合、私は 8 という数字を取得します (58 ではありません)。

したがって、ボタンがインデックスパス 58 にドロップされると、セルが INDEXPATH 8 に挿入されます。

ある時点でテーブルビューで正確なインデックスパスを取得するための提案が必要です。「ポイント」がself.viewのCGPointである場合。

4

1 に答える 1

1

これを試して:

int row = [self rowAtPoint:pointfordeterminingrow];

[myTableView visibleCells];  // call this first to avoid possible iOS bug in next statement
NSArray *visIndexPaths = [myTableView indexPathsForVisibleRows]; 


NSIndexPath* newIndexPath = [visIndexPaths objectAtIndex:row];
于 2012-09-17T07:08:35.160 に答える