IPhone SDK: Adding a UIActivityIndicatorView to a

2020-06-16 03:38发布

问题:

Why doesn't the cell show anything in this code:

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[cell.imageView addSubview:spinner];
[spinner startAnimating];
cell.textLabel.text=@"Carregando...";
[spinner release];

I'm doing this inside tableView:cellForRowAtIndexPath:.

I tried size to fit, create a frame to cell.imageView and a same size frame to the spinner, but nothing works.

What´s wrong with this code?

Thank you..!

回答1:

A slight modification of the method from Thiago:

I think adding the spinner directly to the cell view felt a little hacky, so I used a 1x1 transparent png as the image view and resized it to be whatever my spinner size is:

UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"NoReuse"] autorelease];
cell.textLabel.text = @"Loading...";

UIActivityIndicatorView *spinner = [[[UIActivityIndicatorView alloc] 
    initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease];

// Spacer is a 1x1 transparent png
UIImage *spacer = [UIImage imageNamed:@"spacer"];

UIGraphicsBeginImageContext(spinner.frame.size);

[spacer drawInRect:CGRectMake(0,0,spinner.frame.size.width,spinner.frame.size.height)];
UIImage* resizedSpacer = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();
cell.imageView.image = resizedSpacer;
[cell.imageView addSubview:spinner];
[spinner startAnimating];

return cell;

That gives a cell that looks like this:



回答2:

I found the answer...

David Maymudes was partialy right... It´s necessary to have a "background" to the cell.imageView... But must be a image, not just a frame. So just create a UIImage as a "white background" and set in cell.imageView.image. The code will be:

 UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] 
        initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
 UIImage *whiteback = [[UIImage alloc] initWithContentsOfFile:@"whiteback.png"];
 cell.imageView.image = whiteback;
 [cell.imageView addSubview:spinner];
 [spinner startAnimating];
 cell.textLabel.text=@"Carregando...";
 [whiteback release];
 [spinner release];

The whiteback.png is just a 25x25 pixels white square...

Thanks for everyone help... See you...



回答3:

I think the cell's imageView will probably have a zero-size rectangle, because you haven't put a picture in it. So the spinner is inside but invisible.

So instead of putting the spinner within the imageView, just put it within the cell...

[cell addSubview:spinner];
spinner.frame = CGRectMake(145, 0, 30, 30); // if you want it centered horizontally...

you could also do

cell.accessoryView = spinner;

to put the spinner over at the far right of the cell.