2012-04-13 9 views
0

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

+0

schreiben Bitte die cellForRowAtIndexPath: auch. – Mat

+0

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. –

+0

@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

Antwort

4

sind Sie sicher, dass Sie die richtige Klasse anrufen? Sind Sie sicher, dass die SuperView-Klasse Ihrer Schaltfläche eine ListCell-Klasse ist?

versuchen, dies zu überprüfen:

// (...) 
    ListCell *cell = (ListCell *)button.superview; 
    if ([cell.class isSubclassOfClass:[ListCell class]]) { 
     ///// just a check for indexPath: ///// 
     NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
     NSLog(@"current indexPath: %@", indexPath); 
     ///////////// END CHECK /////////////// 
     cell.detailContent.text = @"FALSE"; 
    }else{ 
     NSLog(@"NOT THE RIGHT CLASS!!!"); 
    } 
+1

was die Zeile ** 'NSIndexPfad * indecPath = [self.tableView indexPathForCell: Zelle];' ** Dosis dort? vielleicht gibt es warnt vor ungenutzten variablen indexpath –

+1

@meronix: ja du hast recht, es ist nicht ListCell noch UITableViewCell. ListCell * Zelle = (ListCell *) button.superview.superview; ist der richtige Weg, um Zellen zu bekommen. Danke für deine Antwort – Dranix

+0

du bist willkommen ... – meronix

1

ok ich es bekam leider Ihre Frage richtig nicht bekommen, was Sie tun können, nur eine teg zu Ihrem Label Ansicht zuweisen, bevor es in der Zelle hinzufügen und dann zum Zeitpunkt der retrive nur

verwenden
UILabel *name = (UILabel *)[cell viewWithTag:kLabelTag]; 

und stellen Sie den Text für das Label

+0

detailContent ist ein benutzerdefiniertes Eigenschaftslabel – meronix

+0

Wahrscheinlich detailContent ist eine Eigenschaft von ListCell. – Mat

Verwandte Themen