如何在一个单元格中显示两个对象(tableView)?

时间:2012-01-22 11:54:57

标签: iphone ios cell tableview

我遇到了一个小问题。我创建了一个UITableView,用户可以在其地址簿中添加联系人。 firstName显示在第一行中,lastName显示在第二行中。我知道问题出在哪里,因为现在我实际上告诉他该怎么做。 但是我如何告诉他在同一个单元格中显示两个名字?我用以下方法做到了但它们不起作用。

-(void)addObjectsFromArray:(NSArray *)otherArray
{
     NSMutableArray *myArray = [[NSMutableArray alloc] init];
     [myArray addObjectsFromArray:menuArray];
     NSLog(@"%@", myArray);
     [self.tableView reloadData];
}

问题是我无法显示myArray中的对象,因为cellforRowAtIndex方法没有获取值。使用那个我得到相同的结果(firstName第一行,lastName第二行):

NSArray *objects = [[NSArray alloc] initWithObjects:firstName, lastName, nil];
NSString *cellValue = [objects objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
NSLog(@"%@", objects);

return cell;

1 个答案:

答案 0 :(得分:3)

您的代码不仅显示不同单元格中的名字和姓氏,而且对索引大于1的行也不起作用。这是因为您的表数据源从您在第一行使用alloc / init创建的全新数组中读取,而不是从模型中读取。你的小数组只包含两个对象,解释了这两行。

以下是您需要做的事情:首先,为表的数据源提供一组用户。假设它被称为userArray。将每个用户的用户数据放入该数组中。假设每个用户都存储为MYUser类型的对象,该对象使用该用户的名字和姓氏响应[user firstName][user lastName]个调用。

现在将此代码放入表的数据源中:

MYUser *user = [userArray objectAtIndex:indexPath.row];
NSString *cellValue = [NSString stringWithFormat:@"%@ %@", [user firstName], [user lastName]];
cell.textLabel.text = cellValue;

编辑:如果你的menuArray将第一个和最后一个名字存储在单独的连续字符串对象中,你仍然可以这样做(虽然我建议反对它,因为它会让人感到困惑将来维护你的计划的人。)

首先,您需要更改返回表中项目数的方法,以返回menuArray.count / 2而不是menuArray.count。然后,您可以按如下方式修改代码:

NSString firstName = [menuArray objectAtIndex:indexPath.row/2];
NSString lastName = [menuArray objectAtIndex:indexPath.row/2 + 1];
NSString *cellValue = [NSString stringWithFormat:@"%@ %@", firstName, lastName];
cell.textLabel.text = cellValue;

EDIT2 :以下是创建存储用户名和姓的类的方法。您将@interface部分添加到MYUser.h,将@implementation部分添加到MYUser.m文件。然后,您在引用MYUser.h类的.m文件中导入MYUser,并使用initWithFirstName:andLastName:初始化新实例。下面的示例假定您使用ARC:

MYUser.h文件:

#import <UIKit/UIKit.h>
@interface MYUser : NSObject
@property (nonatomic, strong) NSString *firstName;
@property (nonatomic, strong) NSString *lastName;
-(id)initWithFirstName:(NSString*)first andLastName:(NSString*)last;
@end

MYUser.m文件:

@implementation MYUser
@synthesize firstName, lastName;
-(id)initWithFirstName:(NSString*)first andLastName:(NSString*)last {
    self = [super init];
    if (self) {
        self.firstName = first;
        self.lastName = last;
    }
    return self;
}
@end