1

関数で動作するカスタム イメージを取得しようとしていaccessoryButtonTappedForRowWithIndexPathます。私が理解していることから、これを行うには を使用する必要がありUIButton、 に を追加するだけでは機能UIImageViewUITableViewCellAccessoryDetailDisclosureButtonません。

私の問題は、UITableViewCellサブクラスから親UITableView関数にタッチ ジェスチャを取得する方法です。

これが私のUITableViewCellサブクラスのコードです:

upVote = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *upVoteImg = [UIImage imageNamed:@"vote.png"];
upVote.frame = CGRectMake(self.frame.size.width-upVoteImg.size.width, 0, upVoteImg.size.width , upVoteImg.size.height);
[upVote setBackgroundImage:upVoteImg forState:UIControlStateNormal];
[self.contentView addSubview:upVote];
[upVote addTarget:self action:@selector(checkButtonTapped:event:)  forControlEvents:UIControlEventTouchUpInside];

呼び出し関数 ( のサブクラス内でもUITableViewCell)

- (void)checkButtonTapped:(id)sender event:(id)event
{
    UITableView *tableView = (UITableView *)self.superview;
    [tableView.delegate tableView:tableView accessoryButtonTappedForRowWithIndexPath:[tableView indexPathForCell:self]];
}

上記の関数の最終行で、次のようにクラッシュします。

*** キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: '-[UITableViewWrapperView delegate]: 認識されないセレクターがインスタンス 0x16f48160 に送信されました'

4

3 に答える 3

0

このような UITableViewCell のカテゴリがあります。

- (UITableView *)tableView
{
    UIView *view = self.superview;

    while (view)
    {
        if ([view isKindOfClass:[UITableView class]])
        {
            return (UITableView *)view;
        }
        else
        {
            view = view.superview;
        }
    }

    return nil;
}

- (NSIndexPath *)indexPath
{
    return [[self tableView]indexPathForCell:self];
}

次に、カスタム ボタンをカスタム テーブルビュー セル (カテゴリをインポートする) のメソッドに接続し、このようなメソッドに接続します。

- (IBAction)customButtonPressed:(id)sender
{
    [self.tableView.delegate tableView:self.tableView accessoryButtonTappedForRowWithIndexPath:self.indexPath];
}
于 2015-07-27T12:43:17.210 に答える
0

より良いものはどうですか?

UITableView *tableview;

if ([self.superview respondsToSelector:@selector(indexPathForCell:)] ) {
    tableview = (UITableView *)self.superview;
} else if ([self.superview.superview respondsToSelector:@selector(indexPathForCell:)]) {
    tableview = (UITableView *)self.superview.superview;
}

if (tableview) {
    // win
}
于 2014-05-15T14:20:36.960 に答える