0

各セルにカスタムボタンがあるテーブルビューがあります。ボタンが配置されたインデックスパスを教えてくれるこのメソッドがあります。以下の方法は iOS 6 ではうまく機能しますが、indexPathForItem は iOS 6.0 以降でしか使用できないため、iOS 5 で同じ結果を得る方法がわかりません。

- (IBAction) checkUncheck:(id)sender
{
    UIButton *sendingButton = (UIButton *) sender;
    UITableViewCell *cell =  (UITableViewCell *)[[sendingButton superview] superview];
    PDFFile *newPDF = [_pdfDocument.pdfFileList objectAtIndex: cell.tag];
    [newPDF setCheck: [NSNumber numberWithBool: ![newPDF.check boolValue]]];

    NSIndexPath *path = [NSIndexPath indexPathForItem: cell.tag inSection: 0];

    [_table reloadRowsAtIndexPaths:[NSArray arrayWithObjects: path, nil] withRowAnimation: UITableViewRowAnimationAutomatic];
}
4

2 に答える 2

1

TableView で NSIndexPath を見つける方法は 3 つあります。

- (NSIndexPath *)indexPathForRowAtPoint:(CGPoint)point;                         // returns nil if point is outside table
- (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell;                      // returns nil if cell is not visible
- (NSArray *)indexPathsForRowsInRect:(CGRect)rect;                              // returns nil if rect not valid 

indexPathForItem を使用するのは適切な方法ではありません。試してみてください

NSIndexPath *path = [self.tableView indexPathForCell:cell] ;
于 2013-06-17T01:10:59.597 に答える
0

カスタム UITableViewCell サブクラスを使用します。で (うまくいけば再利用される) セルを構成するときは-tableView:cellForRowAtIndexPath:、新しく構成されたセルにインデックス パス (行とセクション) を渡します (つまり、各セルは現在のインデックス パスを「認識」します)。

次に、通常のターゲット アクション メカニズムを介してタップされたときに、カスタム ボタンが親セルに通知するようにします。ボタンがタップされると、セル自体がobjectプロパティとして通知をブロードキャストします。テーブル ビュー コントローラーはこの通知をリッスンし、そこからセルを抽出し、セルからインデックス パスを抽出できます。

たとえば、カスタム テーブル セルの実装 (MyTableViewCell.m) では:

- (void) didTapButton:(id) sender

{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"UserTappedCellButton" object:self];
}

ビューコントローラーで:

- (id) init 
{
    if(self = [super init]){
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(didTapCellButton:)
                                                     name:@"UserTappedCellButton"
                                                   object:nil];
    }
    return self;
}


- (void) didTapCellButton:(NSNotifcation*) notification
{
   MyCustomTableViewCell* cell = (MyCustomTableViewCell*)[notification object];

   NSIndexPath* path = [cell path]; // <-- You must define this property 

   // Use index path...
}

もっとシンプルでスマートな方法があるかもしれませんが、これは非常に簡単で、最初に頭に浮かびます...

于 2013-06-17T01:09:05.220 に答える