2010-08-27 45 views

Antwort

10

Der einfachste Weg, dies zu implementieren, ist die Verwendung von Delegaten.

definieren ein Protokoll in Ihrem CustomTableCell.h wie folgt aus:

@protocol CustomTableCellDelegate <NSObject> 
@required 
- (void)reloadMyTable; 
@end 

Der nächste Schritt ist ein Delegat var zur Verfügung zu stellen:

@interface CustomTableCell : UITableViewCell { 
    id<CustomTableCellDelegate> delegate; 
} 

@property (assign) id<CustomTableCellDelegate> delegate; 

Make shure Sie synthetisieren Ihre Stellvertretung-Variable in der CustomTableCell .m.

Jetzt haben Sie einen Delegierten definiert. Es gibt drei verbleibenden Schritte:

Wenn Sie Ihr Handy erstellen Sie haben für diese Zelle den Delegierten setzen wie

cell.delegate = self; 

Make shure Ihre Tableviewcontroller Ihre CustomTableCellDelegate implementiert. Wenn Sie dies tun, werden Sie das implementieren gezwungen - (void) reloadMyTable in Ihrem Tableviewcontroller:

- (void)reloadMyTable { 
    [self.tableView reloadData]; 
} 

Der letzte Schritt ist diese Methode von Ihrem CustomTableCell so zu nennen:

if (self.delegate != NULL && [self.delegate respondsToSelector:@selector(reloadMyTable)]) { 
    [delegate reloadMyTable]; 
} 

Mehr über Delegation here.

Kurz gesagt: Sie definieren ein Protokoll in Ihrer CustomTableViewCell, die vom TableViewController implementiert wird. Wenn Sie eine Methodennachricht an Ihre Stellvertretung senden, wird diese Nachricht an Ihren TableViewController gesendet.

+0

Bisher ist das einzige, was ich nicht klar ist, wo Sie sagen: Stellen Sie sicher, dass Sie tableviewcontroller Ihren benutzerdefinierten Tischzellen-Delegaten implementiert. – Brodie

+0

ignoriere ich habe es, danke – Brodie

+0

@audience. Wo kann ich den Code des letzten Schrittes eingeben? Ich meine, in welcher Methode sollte es anrufen –

2

Der beste Weg, um Benachrichtigungen zu erstellen. In Ihrem TableView müssen Sie es erstellen. Es ist sehr einfach, so etwas wie dieses:

[[NSNotificationCenter defaultCenter] addObserver:self 
            selector:@selector(reloadTableView:) 
             name:@"reloadTable" 
             object:nil]; 

Dann müssen Sie create-Methode:

- (void)reloadTableView:(NSNotification *)notif { 
     [self.yourTableName reloadData]; 

}

und vergessen Sie nicht Benachrichtigung löschen:

-(void)dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"reloadTable"  object:nil]; 

}

und in yo Ihr benutzerdefiniertes tableViewCell, wenn Sie die Tabelle neu laden möchten, benötigen Sie:

[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTable" 
               object:nil]; 
+0

Elegant und weniger Code als die Delegates-Lösung. +1 – user623396

+0

Ich würde das nicht den besten Weg nennen, viel lieber Delegation. – tagy22

Verwandte Themen