2009-05-21 6 views

Odpowiedz

2

Jednym ze sposobów jest uczynienie widoku tabeli przezroczystym (ustaw tło widoku na 0% krycia) i umieszczenie UIImageView za UITableView. Pamiętaj, że przezroczyste tabele i komórki tabeli nie będą działać tak dobrze, jak te nieprzezroczyste.

+0

Nie mogę wymyślić innego sposobu, aby to osiągnąć. –

+0

Czy jest jakiś sposób, mogę to zrobić programowo (nie z programu budującego interfejs)? – ebaccount

+0

Tak, możesz samodzielnie modyfikować hierarchię widoków, jak również kolor tła/przezroczystość UITableView. – pix0r

12
[tableView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"whatever.png"]]]; 
+5

To działa. Ale w zgrupowanym stole boki komórki nie są przezroczyste. Próbowałem już ustawić backgroundView.opaque = NO, nic się nie dzieje. – leolobato

1

Co znalazłem to, że trzeba użyć „zwykłego” stylizowany stół z przezroczystym tłem, a następnie odtworzyć wygląd komórek zaokrąglonych narożników poprzez ustawienie każda komórka jest backgroundView do UIImageView z obrazem który symuluje zaokrąglony wygląd. Oznacza to, że górna, dolna i środkowa komórka wymagają różnych obrazów tła.

Nie dotyczy to jednak tego, co dzieje się, gdy użytkownik dotknie komórki i zostanie "podświetlony" - wtedy będzie wyglądać na kwadrat. Możesz obejść to, ustawiając podświetlony obraz na sfałszowany obraz tła tablecell. Będziesz także chciał stworzyć swój własny widok akcesoriów (ImageView) z białą podświetloną wersją. Następnie możesz utworzyć komórkę podobną do tej, której używam (poniżej). Po przydzieleniu jednej z tych komórek ustawiam backgroundView i accessoryView na moje UIImageViews.

#import "ClearBackRoundedTableCell.h" 


@implementation ClearBackRoundedTableCell 

- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier 
{ 
    if (self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]) { 
    } 
    return self; 
} 


- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated 
{ 
    if([[self.accessoryView class] isSubclassOfClass:[UIImageView class]]) 
     ((UIImageView *)self.accessoryView).highlighted = highlighted; 

    if([[self.backgroundView class] isSubclassOfClass:[UIImageView class]]) 
     ((UIImageView *)self.backgroundView).highlighted = highlighted; 

    self.textLabel.highlighted = highlighted; 
} 

@end 

Jedna uwaga, jeśli tę drogę: komórki w zgrupowanych tabeli są zazwyczaj 300 px szerokości (w układzie pionowym), ale Twój zwykły stół tutaj musiałaby być 302 szeroki, aby umożliwić szarej linii na każdy bok stołu, który zwykle znajduje się poza "zawartością" komórki tabeli.

+0

Lepiej niż przy użyciu obrazu do widoku w tle, rób to sam (podstawowa grafika ułatwia narysowanie zaokrąglonego prostokąta z ramką) – Johnus

+0

'[[coś klasa] isSubclassOfClass: [klasa UIImageView]]' jest taka sama jak " [coś jestKindOfClass: [klasa UIImageView]] ' – user102008

19

Musimy coś zrobić z tym prostym tłem. Zamierzamy użyć obrazu PNG i wyświetlić go za UITableView.

  1. Przygotuj obraz PNG. Powinien mieć rozmiar 320 x 460 (jeśli pasek stanu jest widoczny w Twojej aplikacji) lub 320 x 480 (jeśli go ukryjesz).
  2. Przeciągnij go do XCode do folderu Resources i dodać do projektu
  3. załadowania pliku NIB zawierające swoją UITableView w konstruktorze Interface
  4. otworzyć bibliotekę (Narzędzia> Library), przejdź do zakładki Media i przeciągnij obraz do widoku, utwórz nowy UIImageView.
  5. Użyj inspektor, aby przenieść i zmienić rozmiar obrazu, dlatego przy X = 0, y = 0, width = 320, height = 480
  6. Umieścić UIImageView tył UITableView (układ> spód)
  7. Zapisz , Buduj i idź!

Rozczarowujące, nie będziesz w stanie zobaczyć swojego pochodzenia. Tło UITableView blokuje nam dostęp do UIImageView. Są trzy zmiany, które musisz wprowadzić:

  1. W Inspektorze atrybutów upewnij się, że pole wyboru "Nieprzezroczyste" UITableView jest odznaczone!
  2. ustawiona UITableView kolor tła na przezroczyste:

    tableView.backgroundColor = [UIColor clearColor];

Mam nadzieję, że to pomoże i rozwiąże problem.To działa dla mnie i muszę jeszcze znaleźć bardziej elegancki sposób wyświetlania obrazu tła dla UITableView.

Zaletą mojego rozwiązania, w porównaniu z ustawianiem obrazu tła bezpośrednio na UITableView, jest możliwość wcięcia zawartości tabeli. Często chciałem to zrobić, aby pokazać dwie lub trzy komórki tabeli w dolnej części ekranu.

155

W nowszych wersjach SDK, trzeba ustawić tableView.backgroundView jeśli ma to być przejrzyste, spróbuj coś takiego:

tableView.backgroundColor = [UIColor clearColor]; 
tableView.opaque = NO; 
tableView.backgroundView = nil; 
+4

To działało dla mnie, dzięki Sam. – CiscoIPPhone

+1

Dzięki! Nie wiesz, ile mam z tym kłopotów. Brakowało mi tableView.backgroundView = nil line! – Mark

+0

dude mark this correct, works great – marchinram

2

W UI Builder kolor tła ma wybór „Inne” . Spowoduje to pobranie próbnika kolorów. Próbnik kolorów ma ustawienie krycia. Jeśli ustawisz krycie koloru na 0, działa, nie można mówić do wydajności.

+0

czy robisz to programowo ?! – mircaea

1

Po spędzeniu czasu z próbnika kolorów, okazało się, że trzeba określić nieprzezroczystego tła nie na komórce widoku tabeli XIb, ale dla Table View gdzie będą zlokalizowane komórki, co jest kolejnym xib. Z tego, co widziałem, atrybuty tła tabeli widoku tabeli nie mają efektu wizualnego.

9

tableView.backgroundView = nil; wystarczy. Nie trzeba ustawiać koloru tła jako Wyczyść kolor.

0

próbować ten jeden

UIView *backView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease]; 
backView.backgroundColor = [UIColor clearColor]; 
cell.backgroundView = backView; 

on pracował dla mnie w zgrupowanych tableview.

0

Wykonywanie widoku UITableview jako wyraźnego koloru.

0

Programowo można zrobić to w ten sposób, jeśli obraz zostanie dodany do zasobów:

self.tableView.backgroundColor = [UIColor clearColor]; 
self.tableView.opaque = NO; 
UIImage *backroundImage = [UIImage imageNamed:@"my_backround"]; 
UIImageView *backroundImageView = [[UIImageView alloc] initWithImage:backroundImage]; 

jeszcze można zrobić go w konstruktorze Interface z tego stylu:

IB tableview with image behind

Użytkownik może trzeba skonfigurować interfejs plików nagłówkowych z UITableViewController na UIViewController i dodać <UITableViewDataSource,UITableViewDelegate>, również nie zapomnij ustawić atrybutów tableview, aby nie były nieprzezroczyste i ponownie połączyć dane tableview datasou rce i delegować punkty do kontrolera viewcontroller.

Powiązane problemy