Vor allem muss ich sagen, dass Ihr Ansatz, die gleiche Zelle zu verwenden, um Dinge in eine vertikale zu versetzen, nicht die beste ist. Für diese Art von Situation sollten Sie mehr als eine Zelle verwenden. Etwas wie:
- ...
- DecriptionCell
- QuizCell
- QuizCell
- PollCell
- PollCell
- PollCell
- ...
Trotzdem werde ich Ihnen eine Lösung vorschlagen, die Ihnen helfen könnte, ohne die Struktur Ihres UITableView zu ändern.
Eigentlich hatte ich das gleiche Problem vor ein paar Wochen, und ich fand eine sehr gute Lösung dafür.
Grundsätzlich ist das Hauptkonzept, UITableViewCell wiederzuverwenden, Sie sollten Ansichten in der Konfiguration der Zelle nicht hinzufügen oder entfernen, da die Leistung beeinträchtigt wird.
Also, die Lösung, die ich verwendet habe, war, verwenden Sie unterschiedliche Wiederverwendung Identifikator für jede Art von Konfiguration, die die Zelle haben kann.
Die einzige Anforderung ist, keine Nib-Datei für die Zelle zu haben.
Wenn ich richtig verstanden habe, kann Ihre Zelle Dynamik Quiz und Umfragen haben. Lassen Sie uns sagen, dass maximal 10 Quiz und maximal 10 Umfragen möglich sind. Obwohl ich zusehe, dass beide die gleiche Ansicht haben, QuizPollSubView. Nehmen wir also maximal 20 Untersichten pro Zelle.
So in dem Verfahren, in dem Sie die Zellen registrieren ich tun würde, die nächste:
Class myClass = [CustomTableViewCell class];
NSString *classID = NSStringFromClass(myClass);
for (NSUInteger index = 0; index < 20; index++) {
NSString *identifier = [classID stringByAppendingString:[@(index) stringValue]];
[self.tableView registerClass:myClass forCellReuseIdentifier:identifier];
}
Dann in der CellForRow müssen Sie die Zelle mit dem properIdentifier dequeue, zum Beispiel:
NSString *cellID = NSStringFromClass([CustomTableViewCell class]);
NSUInteger numberOfQuizsAndPolls = 3 + 2; //This is 3 quizs and 2 polls, I gess that you can read from the DataModel
NSString *identifier = [cellID stringByAppendingString:[@(numberOfQuizsAndPolls) stringValue]];
CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
//then configure the cell
Als Nächstes in initWithStyle: reuseIdentifier: Sie sollten die Unterviews mit leerem Wert erstellen und die Informationen aus dem Bezeichner
NSString *stringNumber = [reuseIdentifier stringByReplacingOccurrencesOfString:NSStringFromClass([self class])
withString:@""];
NSUInteger numberOfSubviews = [stringNumber integerValue];
//here you should add all of your QuizPollSubView with emtpy content.
for (NSUInteger index = 0; index < numberOfSubviews; index++) {
QuizPollSubView *vwQuizPoll = [QuizPollSubView loadFromNibWithType:QuizPollSubViewNoViewRelated andNavType:self.navType];
[vwQuizPoll setW:CGRectGetWidth(self.frame)];
[vwQuizPoll setDelegate:self];
//[vwQuizPoll setData:muQuizPollDict]; YOU CAN NOT SET THE DATA HERE BECAUSE YOU DONT HAVE IT
[vwQuizPoll setX:0 andY:offset];
[self.contentView addSubview:vwQuizPoll];
offset = CGRectGetMaxY(vwQuizPoll.frame) + 4;
[self.quizPollViewCollection addObject:vwQuizPoll];
}
0 extrahieren
Schließlich müssen Sie die richtigen Informationen in der Konfiguration der Zelle festlegen. Etwas wie:
- (void)configureWithQuizPollDict:(NSDictionary *)combinedQuizPoll
{
for (NSDictionary *quizPollDict in combinedQuizPoll)
{
//get the proper index in the quizPollViewCollection.
QuizPollSubView *vwQuizPoll = self.quizPollViewCollection[index];
[vwQuizPoll setData:muQuizPollDict];
}
}
Ich hoffe, dass es Ihnen hilft !!
Dank
PD: Wenn Sie eine Zelle mit Nib verwenden möchten wahrscheinlich müssen wir die UITableView Unterklasse benutzerdefinierte Sie dequeue hinzufügen
Vielleicht kann helfen: http://stackoverflow.com/questions/ 5746904/how-to-make-a-uitableviewcell-mit-verschiedenen-subviews-wiederverwendbar? Lq = 1 –