5

カスタムセルを持つ UITableView があります。各 UITableViewCell 内には、UIButton があります。ボタンがタップされたときにボタンがどのセルにあるかを調べようとしています。これを行うために、私はこれを行いました:

- (IBAction)likeTap:(id)sender {


UIButton *senderButton = (UIButton *)sender;
UITableViewCell *buttonCell = (UITableViewCell *)[senderButton superview];
UITableView* table = (UITableView *)[buttonCell superview];
NSIndexPath *pathOfTheCell = [table indexPathForCell:buttonCell];
NSInteger rowOfTheCell = [pathOfTheCell row];
NSLog(@"rowofthecell %d", rowOfTheCell);

これでうまくいくと思ったのですが、indexPathForCell を呼び出すと例外がスローされます。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell indexPathForCell:]: unrecognized selector sent to instance 0x756d650'

私が間違ったことについてのアイデアはありますか?ありがとう!

4

4 に答える 4

6

これはあなたの問題です:

(UITableViewCell *)[senderButton superview]

そのはず:

(UITableViewCell *)[[senderButton superview] superview]

ボタンのスーパービューはセルではないため、セルのサブビューである contentView です。

于 2013-06-30T06:58:19.030 に答える
2

cellForRowAtIndexPAth メソッドで各ボタンにタグを設定しない理由:

button.tag = indexPath.row;

そして、あなたの方法には次のものがあります:

- (IBAction)likeTap:(id)sender {
    NSLog(@"rowofthecell %d", button.tag);
}
于 2013-06-30T06:56:33.740 に答える
1

で提案されているように各ボタンにタグを設定するか、以下に示すようにedzio27使用してみてください。introspection

- (IBAction)likeTap:(UIButton *)sender {

    UIButton *senderButton = (UIButton *)sender;

    if ([senderButton.superView isKindOfClass:[UITableViewCell class]]) {
        UITableViewCell *buttonCell = (UITableViewCell *)[senderButton superview];

        if ([buttonCell.superView isKindOfClass:[UITablewView class]]) {
            UITableView* table = (UITableView *)[buttonCell superview];

            NSIndexPath *pathOfTheCell = [table indexPathForCell:buttonCell];
            NSInteger rowOfTheCell = [pathOfTheCell row];
            NSLog(@"rowofthecell %d", rowOfTheCell);
        }
    }           
}
于 2013-06-30T07:06:13.947 に答える