Sie sind nah an Ihrem Ansatz. In ähnlichen Situationen habe ich separate UITableViewCell-Unterklassen erstellt, das Tag des UISwitch als index.row des Indexpfads festgelegt und diese UITableViewCell-Unterklasse nur in einem bestimmten Abschnitt der Tabellenansicht verwendet. Dadurch können Sie das Tag der Zelle verwenden, um eindeutig zu bestimmen, in welcher Zelle das Ereignis enthalten ist, ohne eine separate Indexliste zu verwalten (so wie es sich anhört).
Da der Zelltyp eindeutig ist, können Sie einfach auf die anderen Elemente der Zelle zugreifen, indem Sie Methoden/Eigenschaften für die Subklasse UITableViewCell erstellen.
Zum Beispiel:
@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
In:
- (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
}
Besitzer ist der Delegierte für die Zelle und kann dann verwendet werden, um Aktionen in Ihrem Controller zu initiieren. Achten Sie darauf, schließen Sie UISwitch zur toggleValue Aktion, so dass Sie Aktionen in den Delegierten initiieren können, wenn die UISwitch Zustand ändert:
-(IBAction)toggleValue:(id)sender;
{
BOOL oldValue = [value boolValue];
[value release];
value = [[NSNumber numberWithBool:!oldValue] retain];
[owner performSelector:@selector(someAction:) withObject:toggle];
}
Durch die UISwitch mit dem Methodenaufruf geben, können Sie dann auf den Indexpfad für die Zelle. Sie können die Verwendung der Tag-Eigenschaft auch umgehen, indem Sie explizit einen Ivar zum Speichern des NSIndexPath der Zelle und dann zum Weiterleiten der gesamten Zelle mit dem Methodenaufruf verwenden.
Ich habe gerade das Gleiche gemacht, mein einziger Kommentar wäre, einen Namen als Eigentum zu machen. – typemismatch