1

在我的 cellForRowAtIndex 中,我初始化了一个按钮(它显示在 tableview 的每个单元格中):

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;

它有一个普通的图像,如果用户点击按钮,图像就会改变。我还从 XML 中获取了 button.title 的内容。因此,我告诉它从网络上获取正确的标题。这工作正常,但有时(不是一直)并且随机地从下一个单元格或向下三行的单元格更改按钮。我不知道为什么,在使用断点/调试器运行时找不到任何东西。

-(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];

尝试使用 UIControlEventTouchUpInside 而不是 UIControlEventTouchDown。

您还可以创建一个自定义单元格,然后您可以在 UITableViewCell 子类中为您的按钮创建一个属性,并通过该属性更改按钮的图像。

也不要从按钮的操作中更改图像。您可以通过 tableview 的 didSelectRowAtIndexPath 委托中的 cell.yourbuttonName 访问按钮,然后更改图像。

于 2012-05-12T12:21:44.200 回答