如何在UITableView中为UIButton设置动画?

时间:2010-06-15 17:00:27

标签: iphone objective-c uitableview uibutton

我目前有一个UITableView,每个单元格包含四个UIButtons。我正在为每个按钮放置一个图像,并在线下载图片。我希望在图像下载完成后按钮淡入。我知道我可以在viewDidLoad中设置动画,但我会在cellForRowAtIndex函数中指定图像。当我使用图片更新UIButton时,如何在以后的UIButton设置动画?

2 个答案:

答案 0 :(得分:1)

你可能应该为UIButton分配一个标签,甚至可以定义一个整数标签,以便在你有四个按钮时便于阅读。

#define CELL_BUTTON_ONE 9999

当您构建第一个按钮时,请指定此标记:

[myButton setTag:CELL_BUTTON_ONE];
[cell addSubView:myButton];

由于我不知道你在哪里或如何加载图像,所以说你应该做什么有点困难。我们的想法是获得对UITableViewCell的引用,该UITableViewCell拥有您要用图像替换的按钮。您可以随时随地访问单元格的任何地方:

UIButton *buttonOne = [cell viewWithTag:CELL_BUTTON_ONE];
[button setImage:loadedImage];

答案 1 :(得分:0)

在-cellForRowAtIndexPath中执行此操作。图像下载完成后,您将在表格视图上调用-reloadData。您可以为单元格中的每个UIButton创建出口,也可以为它们分配标签。在IB中将其alpha设置为0.0。然后,当调用-cellForRowAtIndexPath时,如果该行/按钮的图像可用,则设置它的图像,然后在UIView动画块中调用-setAlpha:1.0。类似的东西:

- (UITableViewCell*)tableView:(UITableView*)tv 
        cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
    // get a reference to your cell...

    // get reference to the UIButton in the cell
    UIButton *button = [cell viewWithTag:tagForButton];

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.75];
    [button setAlpha:1.0f];
    [UIView commitAnimations];
}

我能想到的唯一问题是,由于单元重用,您需要根据数据跟踪给定indexPath的alpha值。因此,如果当前单元格中的button1已将其alpha设置为1.0,则您不希望再次为其设置动画,但您需要为尚未设置的任何其他按钮的alpha设置动画。您需要跟踪此图像可见性状态。这并不是很难,但除了设置alpha之外,还有更多内容。如果您需要澄清,请告诉我。