0

UITableViewCell の横にあるボタンに問題があります。ストーリーボードを使用しており、IB を介してボタンを接続しています。cellforRowatIndexPath 内で、ボタンにアクションを追加しました。

cell.likeBtnPressed.tag = indexPath.row;
[cell.likeBtnPressed addTarget:self action:@selector(userDidTapOnLikeButton:photo:) forControlEvents:UIControlEventTouchUpInside];

以下に、ボタンが押されたときに呼び出されるものを示します。

-(void)userDidTapOnLikeButton:(UIButton *)button photo:(PFObject *)photo{
    //Disable the button so users cannot send duplicat requests
    [button setEnabled:NO];
    [button setTintColor:[UIColor redColor]];


    //Set the new state of the button
    BOOL liked = !button.selected;
    [button setEnabled:liked];

    //Get the current number of likes the post have
    NSString *originalButtonTitle = button.titleLabel.text;
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];

    //Update the like count in the ECDCache
    NSNumber *likeCount = [numberFormatter numberFromString:button.titleLabel.text];
    if (liked) {
        likeCount = [NSNumber numberWithInt:[likeCount intValue] + 1];
        [[ECDCache sharedCache] incrementLikerCountForPhoto:photo];
    }else{
        if ([likeCount intValue] > 0) {
            likeCount = [NSNumber numberWithInt:[likeCount intValue] - 1];
        }

        [[ECDCache sharedCache] decrementLikerCountForPhoto:photo];
    }

    //Add the current user as a liker of the photo in ECDCache
    [[ECDCache sharedCache] setPhotoIsLikedByCurrentUser:photo liked:liked];

    //Update the button label
    [button setTitle:[numberFormatter stringFromNumber:likeCount] forState:UIControlStateNormal];

    //Call the appropriate static method to handle creating/deleting the right object
    if (liked) {
        [ECDUtility likePhotoInBackground:photo block:^(BOOL succeeded, NSError *error) {
            [button setEnabled:YES];
            [button setTitleEdgeInsets:UIEdgeInsetsMake(-1.0f, 0.0f, 0.0f, 0.0f)];
            [[button titleLabel] setShadowOffset:CGSizeMake(0.0f, -1.0f)];

            if (!succeeded) {
                // Revert the button title (the number) if the call fails
                [button setTitle:originalButtonTitle forState:UIControlStateNormal];
            }
        }];
    }
}

ボタンを押すたびに、これを受け取ります:

-[UITouchesEvent objectId]: unrecognized selector sent to instance 0x15ee5de0

何を間違えたのかわからない

4

2 に答える 2

1

問題は、メソッドが受け取る 2 番目のパラメーターがPFObjectではなく であることUIEventです。

に送信できるセレクタには、次の 3 つのタイプがありますaddTarget:action:forControlEvents:

  • @selector(a): このメソッドはパラメータを取りません。
  • @selector(a:)UIControl: このメソッドには、制御イベントを受け取った1 つのパラメーターがあります。
  • @selector(a:b:): このメソッドにはUIControl、制御イベントを受け取った とUIEventそれをトリガーした の 2 つのパラメーターがあります。

ボタンを取得するだけなので、次のような署名が必要です。

-(void)userDidTapOnLikeButton:(UIButton *)button
{
    PFObject *photo = [self someLogicToGetThePhotoFromTheButton:button];
    ...
于 2013-10-02T16:46:56.997 に答える
0

UIButton セレクターに複数のパラメーターを持つターゲットを追加することはできません。セレクターが呼び出されると、sender パラメーター (その場合は UIButton オブジェクト) のみを受け取ります。したがって、次を使用することをお勧めします。

[cell.likeBtnPressed addTarget:self action:@selector(userDidTapOnLikeButton:photo:) forControlEvents:UIControlEventTouchUpInside];

-(void)userDidTapOnLikeButton:(id)sender{
  //Your code
}

次に、たとえばセルのタグを使用して写真を取得します。

幸運を ;)

于 2013-10-02T16:32:50.987 に答える