我遇到了一个小问题。我创建了一个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的行。这是因为表数据源从第一行使用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
导入引用了MYUser
类的.m文件中,并使用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