1

同じ tableView で 2 種類のセルをどのようにエレガントにコーディングしますか?

明らかに、私はこのようにすることができます:

NSDictionary *cellInfo = [_userInformation objectAtIndex:indexPath.row];
NSString *cellType = [cellInfo objectForKey:@"type"];
if ([cellType isEqualToString:kProfileImage]) {
    ProfileImageCell *cell = [tableView dequeueReusableCellWithIdentifier:@"profileImageCell"];
    cell.descriptionLabel.text = [cellInfo objectForKey:@"cellLabelText"];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    return cell;
}
else {
    AccountCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AccountCell"];
    cell.descriptionLabel.text = [cellInfo objectForKey:@"cellLabelText"];
    cell.textField.placeholder = [cellInfo objectForKey:@"textFieldPlaceholder"];
    cell.textField.delegate = self;
    cell.textField.clearButtonMode = UITextFieldViewModeWhileEditing;
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    return cell;
}
return nil;

しかし、私の先生はいつも、何かを二度書いてはいけないと言います。どちらの場合も同じです。ご覧のとおり、どちらの場合も 3 行は同じです。それらをifの外に移動し、if本体の各ケースに固有の行のみを残したいと思います。

4

3 に答える 3

1

上記のコードを再構成する最良の方法は次のとおりです。

NSDictionary *cellInfo = [_userInformation objectAtIndex:indexPath.row];
NSString *cellType = [cellInfo objectForKey:@"type"];
UITableViewCell *aCell = nil;

if ([cellType isEqualToString:kProfileImage]) {
    aCell = [tableView dequeueReusableCellWithIdentifier:@"profileImageCell"];
} else {
    aCell = [tableView dequeueReusableCellWithIdentifier:@"AccountCell"];
    ((ProfileImageCell *)aCell).descriptionLabel.text = [cellInfo objectForKey:@"cellLabelText"];
    ((ProfileImageCell *)cell).textField.clearButtonMode = UITextFieldViewModeWhileEditing;


}

aCell.textField.delegate = self;
aCell.descriptionLabel.text = [cellInfo objectForKey:@"cellLabelText"];
[aCell setSelectionStyle:UITableViewCellSelectionStyleNone];
return aCell;

注: *1. メソッド内で複数の return ステートメントを使用しないでください。2. ((ProfileImageCell )aCell): これは、「aCell」オブジェクトを「ProfileImageCell」型に型キャストする簡単な方法です。「textField」は UITableViewCell のプロパティではないためです。

于 2013-09-11T09:07:45.173 に答える