У меня возникла проблема с управлением пользовательским интерфейсом моего приложения. Приложение использует UITableView с несколькими ячейками прототипов. Все работает хорошо, у меня, как:Как ЭФФЕКТИВНО реализовать несколько пользовательских UITableViewCells с ТАКЖЕ различного контента?
TypeACell.h + m files
TypeBCell.h + m files
TypeBCell.h + m files
etc.
Я создал прототип клетки в моем UITableView раскадровке, и имеют, как 6 из них, каждый из которых связан с определенным типом клеток.
Суть в том, что по меньшей мере 4 элемента каждой пользовательской ячейки могут быть повторно использованы в каждой ячейке. Предположим, что в каждой пользовательской ячейке различаются только два элемента.
Ради аргумента, давайте представим, что клетки выглядеть следующим образом:
TypeACell
row1
row2
rowCustomA1
rowCustomA2
TypeBCell
row1
row2
rowCustomB1
rowCustomB2
etc.
Тогда в cellForRowAtIndexPath у меня есть что-то вроде этого:
if(array[i] == TypeA){
TypeACell *cell = [tblView dequeueReusableCellWithIdentifier:typeAIdentifier];
set row1,row2, rowCustomA1, rowCustomA2;
display TypeACell
}
else if(array[i] == TypeB){
TypeBCell *cell = [tblView dequeueReusableCellWithIdentifier:typeBIdentifier];
set row1,row2, rowCustomB1, rowCustomB2;
display TypeBCell
}
Дело в том, что использование такого рода реализации, Я должен изменить 12 мест, чтобы внести изменения, что является общим для всех ячеек. Я ищу способ изменить свою реализацию. Мне было интересно, существует ли какой-то конкретный метод Objective-C, который поможет мне справиться с этой глупостью. Не могли бы вы предоставить мне свой опыт и советы?
Редактировать: Добавлена инициализация ячейки для каждого «если». Прямо сейчас, это только проблема, которую я не могу решить в реализации на основе наследования.
не специфичны для ObjC, но по-прежнему важно, чтобы понять: http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) – Krumelur
Почему вы итерацию над массивом ? '-tableView: cellForRowAtIndexPath:' сообщает вам, какой элемент вам нужен. –
Да, ты совершенно прав, это была просто ошибка в псевдокоде. Мысль cellForRowAtIndexPath, и вместо этого написал «для». Однако вопрос об использовании разных идентификаторов остается. – Michael