2009-08-12 12 views
8

Dlaczego nie komórka pokazać coś w tym kodzie:iPhone SDK: Dodawanie UIActivityIndicatorView do UITableViewCell

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
[cell.imageView addSubview:spinner]; 
[spinner startAnimating]; 
[email protected]"Carregando..."; 
[spinner release]; 

Robię to wewnątrz tableView:cellForRowAtIndexPath:.

Próbowałem dopasować rozmiar, utworzyć ramkę do cell.imageView i taką samą wielkość ramki do przędzarki, ale nic nie działa.

Co jest nie tak z tym kodem?

Dziękuję ..!

+0

Czy ustawienie ramkę wskaźnika aktywności? Coś jak spinner.frame = CGRectMake (0, 0, 30, 30)? Możesz także sprawdzić ramkę i widoczność komórki.imageView się. – Tyler

+0

Tak, stworzyłem zarówno ramkę obrotową, jak i ustawię jego widoczność ... Ale znalazłem odpowiedź, jak opisałem poniżej ... Dzięki za pomoc ..! – Thiago

Odpowiedz

3

Myślę, że obraz w komórce będzie prawdopodobnie miał prostokąt zerowy, ponieważ nie umieściłeś w nim obrazu. Więc spinner jest wewnątrz, ale niewidzialny.

Więc zamiast umieszczenie tarczy w ImageView, wystarczy umieścić go w komórce ...

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

można również zrobić

cell.accessoryView = spinner; 

umieścić na tarczy po prawej komórki.

+0

AcessoryView działało bardzo dobrze ... Ale spinner.frame nie ... Znalazłem rozwiązanie, które ma stworzyć "biały kwadrat" UIImage i umieścić je jako cell.imageView.image ... Them the spinner pojawia się ... Ale dzięki za pomoc ..! – Thiago

+0

Przepraszam za to; Powinienem był przetestować to sam, zamiast ufać drugiemu komentatorowi! –

9

Znalazłem odpowiedź ...

David Maymudes był ciowo rację ... its trzeba mieć „bezszwowe” do cell.imageView ... Ale musi być obraz, a nie tylko rama. Stwórz więc UIImage jako "białe tło" i ustaw w cell.imageView.image. Kod będzie:

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

whiteback.png tylko 25x25 pikseli biały kwadrat ...

Dzięki dla wszystkich pomóc ... Do zobaczenia ...

9

niewielką modyfikację metoda z Thiago:

myślę dodanie tarczy bezpośrednio do widoku komórek czuł trochę hacky, więc użyłem 1x1 przezroczysty png jak widok obrazu i przeskalowane to być cokolwiek mój rozmiar tarczy jest:

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; 

Daje komórkę, który wygląda tak:

loading cell

+0

działa jak urok :-) – crosscode

Powiązane problemy