0

我有一个表格视图,其中每个单元格都有一个自定义按钮。我有这个方法告诉我按钮所在的索引路径。下面的方法在 iOS 6 中效果很好,但我不确定如何在 iOS 5 中获得相同的结果,因为 indexPathForItem 仅在 iOS 6.0 及更高版本中可用。

- (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 回答