首先解释一下:我有一个普通的tableView,其中包含联系人及其编号。他们可以将他们的联系人添加到应用程序。有时他们有姓,有时他们不。 事实上,当我添加只有名字的人时,其他联系人的姓氏也会被删除。当我添加名字和名字的人时,只有名字的人会得到一个(null),其中应该是姓氏。 我希望我理解它(英语不是我的母语) - 我尝试使用if语句(正如你将在代码中看到的那样),但那并没有成功。我还尝试在另一个数组中添加firstName。 也没有用,因为你不能(我认为!)填充一个包含多个数组的tableView。
- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person {
firstName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
lastName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
ABMultiValueRef phoneNumbers = (ABMultiValueRef)ABRecordCopyValue(person, kABPersonPhoneProperty);
number = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, 0);
[thenumbers addObject:number];
if(lastName && ([lastName length] > 0)) {
[menuArray addObject:[[Contacts alloc] initWithFirstName:firstName andLastName:lastName]];
}
else {
[menuArray addObject:[[Contacts alloc] initWithFirstName:firstName]];
}
[self dismissModalViewControllerAnimated:YES];
return NO;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];}
if(lastName && ([lastName length] > 0)) {
Contacts *user = [menuArray objectAtIndex:indexPath.row];
NSString *cellValue = [NSString stringWithFormat:@"%@ %@", [user firstName], [user lastName]];
cell.textLabel.text = cellValue;
}
else {
Contacts *user = [menuArray objectAtIndex:indexPath.row];
NSString *cellValue = [NSString stringWithFormat:@"%@", [user firstName]];
cell.textLabel.text = cellValue;
}
NSString *numbers = [thenumbers objectAtIndex:indexPath.row];
cell.detailTextLabel.text = numbers;
return cell;
}
答案 0 :(得分:1)
在您的方案中,最好使用返回的ABRecordCopyCompositeName
:
为记录返回适当的,人性化的名称。对于人 记录:这些属性的连接值:前缀,后缀, 组织,名字和姓氏。
答案 1 :(得分:1)
您的tableview:cellforRowAtIndexPath:方法可以在滚动期间多次调用(实际上每次将新行滚动到视图中时,或者当您重新加载表视图的数据时都会调用它)。然而,在此方法中,您使用添加人员时设置的“lastName”实例变量。这意味着表视图中的每个行都假定属于该行的联系人具有该姓氏。
而不是
if (lastName && ([lastName length] > 0)) {
Contacts *user = [menuArray objectAtIndex:indexPath.row];
NSString *cellValue = [NSString stringWithFormat:@"%@ %@", [user firstName], [user lastName]];
cell.textLabel.text = cellValue;
} else {
Contacts *user = [menuArray objectAtIndex:indexPath.row];
NSString *cellValue = [NSString stringWithFormat:@"%@", [user firstName]];
cell.textLabel.text = cellValue;
}
您需要使用
Contacts *user = [menuArray objectAtIndex:indexPath.row];
if ([user lastName] && ([[user lastName] length] > 0)) {
NSString *cellValue = [NSString stringWithFormat:@"%@ %@", [user firstName], [user lastName]];
cell.textLabel.text = cellValue;
} else {
NSString *cellValue = [NSString stringWithFormat:@"%@", [user firstName]];
cell.textLabel.text = cellValue;
}