2012-04-21 19 views
6

Do tej pory musiałem tylko wdrożyć prototypowe komórki z predefiniowanymi projektami (normalne, podtytuły itp.) I nie stanowiło to problemu.Komórki prototypowe iOS z kontrolkami UIC wewnątrz

Teraz muszę zaimplementować prototypowe komórki, które zawierają pewne elementy sterujące, takie jak segmentowany przełącznik, przełącznik lub dowolne inne. Problem polega na tym, że nie jestem w stanie dowiedzieć się, w jaki sposób uruchamiane działania są wdrażane i jak są one powiązane z kontrolą. Ponadto nie znalazłem żadnego przykładu na to, w jaki sposób zaimplementowane są różne prototypy komórek wewnątrz pojedynczego kontrolera UITableViewController.

Wiem, że to rodzaj ogólnego pytania, ale chciałbym docenić kilka wskazówek tutaj. Może ktoś wie o jakiejś dokumentacji, samouczku, itd. Cóż, jakakolwiek pomoc mogłaby być,

Thnaks z góry.

Odpowiedz

11

Zajęło mi trochę czasu, aby zrozumieć, jak korzystać z prototypowych komórek. Jeśli chcesz uzyskać dostęp do elementów interfejsu użytkownika w komórce prototypowej, musisz utworzyć podklasę UITableViewCell i przypisać ją do komórki prototypowej w programie Interface Builder. Następnie należy określić właściwości IBOutlet ręcznie np .:

@interface OptionSwitchCell : UITableViewCell 
@property (weak, nonatomic) IBOutlet UISwitch* switchControl; 
@end 

Następnie można połączyć elementy interfejsu sterowania przez przeciąganie z elementu do określenia własności w widoku asystenta. Zamiast tego IBActions można zdefiniować wewnątrz kontrolera widoku będącego właścicielem. Możesz przeciągnąć z elementu interfejsu z pliku nagłówkowego Kontrolera widoku i utworzyć akcję. Wewnątrz realizacji akcji prawdopodobnie będziesz chciał wiedzieć, która komórka wyzwoliła akcję. Robię to tak:

@implementation SomeTableViewController 

- (IBAction)toggleActivity:(id)sender { 
    OptionSwitchCell* cell = (OptionSwitchCell *)[sender superview].superview; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
    ... 
} 

@end 

Innym rozwiązaniem dla znalezienia odpowiedniej komórki i ścieżkę indeksu (o jrturton):

- (IBAction)toggleActivity:(id)sender { 
    CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *hitIndex = [self.tableView indexPathForRowAtPoint:hitPoint]; 
    OptionSwitchCell* cell = (OptionSwitchCell *)[self.tableView cellForRowAtIndexPath:hitIndex]; 
    ... 
} 

Chociaż jest to trochę dziwaczne, ja nie znalazłem lepsze rozwiązanie jak dotąd. Nadzieja, która pomaga.

+1

Kilka minut temu znalazłem to wideo (i jego drugą część): http://youtu.be/0AsChJk422c to mniej więcej to, co wyjaśniłeś, ale on/ona używa delegata. Ta sama zasada, ale wygląda trochę bardziej czysto. Dzięki za odpowiedź ! – Marcal

+0

To rzeczywiście jest czystsze rozwiązanie. Dzięki za wskaźnik. Chociaż trochę więcej kodu standardowego dla wszystkich protokołów. – Sbhklr

+1

Lepszy sposób na znalezienie rzędu kontroli można znaleźć w mojej odpowiedzi tutaj: http://stackoverflow.com/questions/9274494/how-to-know-the-uitableview-row-number/9274863#9274863 – jrturton

Powiązane problemy