Jesteś blisko swojego podejścia. W podobnych sytuacjach stworzyłem oddzielne podklasy UITableViewCell, ustawiłem znacznik UISwitch na index.row ścieżki indeksu i używam tylko tej podklasy UITableViewCell w określonej sekcji widoku tabeli. Dzięki temu możesz użyć znacznika komórki, aby jednoznacznie określić, która komórka ma wydarzenie bez utrzymywania osobnej listy indeksu (jak to brzmi, jakbyś robił).
Ponieważ typ komórki jest unikalny, można łatwiej uzyskać dostęp do innych elementów komórki, tworząc metody/właściwości w podklasie UITableViewCell.
Na przykład:
@interface TableViewToggleCell : UITableViewCell {
IBOutlet UILabel *toggleNameLabel;
IBOutlet UILabel *detailedTextLabel;
IBOutlet UISwitch *toggle;
NSNumber *value;
id owner;
}
@property (nonatomic, retain) UILabel *toggleNameLabel;
@property (nonatomic, retain) UILabel *detailedTextLabel;
@property (nonatomic, retain) UISwitch *toggle;
@property (nonatomic, retain) id owner;
-(void) setLable:(NSString*)aString;
-(void) setValue:(NSNumber*)aNum;
-(NSNumber*)value;
-(void) setTagOnToggle:(NSInteger)aTag;
-(IBAction)toggleValue:(id)sender;
@end
w:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// ... prior iniitalization code for creating cell is assumed
toggleCell.owner = self;
[toggleCell setLable:@"some string value"];
[toggleCell setTagOnToggle:indexPath.row];
toggleCell.owner = self;
return toggleCell;
//... handle cell set up for other cell types as needed
}
Właściciel jest delegatem na komórki i mogą być następnie wykorzystane do wszczęcia działań w kontrolerze. Upewnij się, że podłączenie UISwitch do działania toggleValue, tak aby można było inicjować działania w delegata gdy UISwitch zmienia stan:
-(IBAction)toggleValue:(id)sender;
{
BOOL oldValue = [value boolValue];
[value release];
value = [[NSNumber numberWithBool:!oldValue] retain];
[owner performSelector:@selector(someAction:) withObject:toggle];
}
Przekazując UISwitch z wywołania metody, można wtedy uzyskać dostęp do ścieżki indeksu komórka. Można również ominąć użycie właściwości znacznika, jawnie posiadając element ivar do przechowywania NSIndexPath komórki, a następnie przekazując całą komórkę za pomocą wywołania metody.
Po prostu zrobiłem to samo, moim jedynym komentarzem byłoby uczynić nazwę nieruchomością. – typemismatch