1

私のcellForRowAtIndexで、ボタンを初期化します(テーブルビューのすべてのセルに表示されます)。

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self
           action:@selector(customActionPressed:)
 forControlEvents:UIControlEventTouchDown];
[button setTitle:@"" forState:UIControlStateNormal];
button.frame = CGRectMake(0.0f,cell.frame.size.height -15, 160.0f, 15.0f);
UIImage *buttonImage = [UIImage imageNamed:@"Image1.png"];
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[button.titleLabel setFont:[UIFont fontWithName:@"Arial" size:13.0]];
button.contentEdgeInsets = UIEdgeInsetsMake(1, 60, 0, 0);
[button setBackgroundImage:buttonImage forState:UIControlStateNormal];    
[cell addSubview:button];
button.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;

通常の画像で、ユーザーがボタンをクリックすると画像が変わります。また、button.titleのコンテンツをXMLから取得します。したがって、Webから正しいタイトルを取得するように指示します。これは正常に機能しますが、場合によっては(常にではありません)、ランダムに次のセルまたは3行下のセルからボタンを変更します。理由がわからず、ブレークポイント/デバッガーで実行しているときに何も見つかりませんでした。

-(void)customActionPressed :(id)sender
{
    UITableViewCell *owningCell = (UITableViewCell*)[sender superview];

    NSIndexPath *pathToCell = [self.tableView indexPathForCell:owningCell];

    UIImage *buttonImage = [UIImage imageNamed:@"image2.png"];

    [self doXMLParsing];
    [sender setBackgroundImage:buttonImage forState:UIControlStateNormal];
    NSString *TableText = [[NSString alloc] initWithFormat:@"%@", [[tabelle objectAtIndex:pathToCell.row] pressed1]]; 
    [sender setTitle:TableText forState:UIControlStateNormal];
    ((UIButton *)sender).enabled = NO;
}

だから多分誰かが私がどこで間違っていたのか見ることができます。さらにコードが必要な場合は、そのように言ってください。

4

1 に答える 1

1
[button addTarget:self action:@selector(customActionPressed:)
     forControlEvents:UIControlEventTouchDown];

UIControlEventTouchDown の代わりに UIControlEventTouchUpInside を試してください。

また、カスタムセルを作成してから、ボタンのUITableViewCellをサブクラス化するクラスでプロパティを作成し、そのプロパティを介してボタンの画像を変更できます。

また、ボタンのアクションから画像を変更しないでください。tableviewのdidSelectRowAtIndexPathデリゲートのcell.yourbuttonNameを介してボタンにアクセスし、画像を変更できます。

于 2012-05-12T12:21:44.200 に答える