Я пытаюсь найти способ не дублировать код при настройке пользовательских ячеек в табличном представлении.В настоящее время у меня есть класс BaseCell, разделенный на подклассы от UITableViewController, а затем два подкласса BaseCell: CellTypeOne и CellTypeTwo.Такую настройку я сейчас использую:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *type = [self.rowTypes objectAtIndex:indexPath.row];
if ([type isEqualToString:@"Type 1"]) {
CellTypeOne *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell 1"];
cell.picture.image = // An image
cell.caption.text = // A caption
cell.author.text = // An author
return cell;
}
else if {[type isEqualToString:@"Type 2"]) {
CellTypeTwo *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell 2"];
cell.picture.image = // An image
cell.caption.text = // A caption
cell.number.text = // A number
return cell;
}
}
Поскольку некоторые из устанавливаемых свойств одинаковы для каждого типа ячеек, мне интересно, есть ли способ сделать что-то вродеthis:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *type = [self.rowTypes objectAtIndex:indexPath.row];
id cell;
if ([type isEqualToString:@"Type 1"]) {
cell = [tableView dequeueReusableCellWithIdentifier:@"Cell 1"];
// Cast cell to (CellTypeOne *)?
cell.author.text = // An author
}
else if {[type isEqualToString:@"Type 2"]) {
CellTypeTwo *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell 2"];
// Cast cell to (CellTypeTwo *)?
cell.number.text = // A number
}
cell.picture.image = // An image
cell.caption.text = // A caption
return cell;
}
Таким образом, я могу выполнить специфичную для класса настройку для каждого подкласса, а затем выполнить общую настройку для обоих.Единственный способ заставить это работать, это разыгрывать ячейку каждый раз, когда мне нужно ее использовать, что-то вроде этого:
[(BaseCell *)cell picture].image = // An image
Приведение ячейки в каждой строке кажется более трудоемким, чем парастрок дублированного кода для начала, но я просто пытаюсь найти лучший способ сделать это.