Ich habe eine benutzerdefinierte Zelle, und in dieser benutzerdefinierten Zelle habe ich einen Knopf und ein Label:iOS - Wie auf benutzerdefinierte Zelle zugreifen, wenn Griff Schaltfläche Ereignis in dieser Zelle?
#import <UIKit/UIKit.h>
@interface ListCell : UITableViewCell{
}
@property (nonatomic, retain) IBOutlet UIButton* buttonContent;
@property (nonatomic, retain) IBOutlet UILabel* detailContent;
@end
Wenn ich Griff Click-Ereignis der Schaltfläche:
- (IBAction)expandListCell:(id)sender{
UIButton *button = (UIButton *)sender;
ListCell *cell = (ListCell *)button.superview;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
cell.detailContent.text = @"FALSE"; // It throw an exception
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"listCell";
ListCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.buttonContent.tag = indexPath.row;
return cell;
}
eine Ausnahme werfen, wenn ich versuche, Zugriff auf ein beliebiges Element aus meiner benutzerdefinierten Zelle (ListCell):
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCellContentView detailContent]: unrecognized selector sent to instance 0x8887ca0'
ich denke, die Art, wie ich benutzerdefinierte Zelle bekam falsch ist. Wer weiß, wie man es richtig macht?
Vielen Dank im Voraus
schreiben Bitte die cellForRowAtIndexPath: auch. – Mat
Frage 1: Haben Sie ein '@ synthetisieren 'in Ihrer benutzerdefinierten Zellenimplementierung? Frage 2: Warum versuchen Sie, die Zelle an erster Stelle zu bekommen - Ihre Taste sollte eine Methode auf der Zelle aufrufen, um ihr zu sagen, dass sie den Text ändern soll. Ihr Tastencode sollte nicht direkt auf den Zelleninhalt zugreifen. –
@Mat: Ich habe cellForRowAtIndexPath hinzufügen. Nick Bull: 1, Ja ich habe synthetisieren. 2, ich muss wirklich auf die Zelle zugreifen, wenn die Schaltfläche geklickt wird, der Code, den ich gepostet habe, ist vereinfacht – Dranix