j'ai pu faire ce que je pense que vous décrivez avec le code suivant:
#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
@interface ELEViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@end
@interface ELEViewController()
@property (nonatomic, strong) NSArray *arrayOfPeople;
@property (nonatomic, assign) CFArrayRef people;
@property (nonatomic, strong) NSMutableSet *selectedPeople;
@end
@implementation ELEViewController
@synthesize arrayOfPeople = _arrayOfPeople;
@synthesize people = _people;
@synthesize selectedPeople = _selectedPeople;
- (NSMutableSet *) selectedPeople {
if (_selectedPeople == nil) {
_selectedPeople = [[NSMutableSet alloc] init];
}
return _selectedPeople;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)viewDidLoad {
[super viewDidLoad];
UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(50, 50, 300, 300)
style:UITableViewStylePlain];
tableView.delegate = self;
tableView.dataSource = self;
[self.view addSubview:tableView];
ABAddressBookRef addressBook = ABAddressBookCreate();
self.people = ABAddressBookCopyArrayOfAllPeople(addressBook);
self.arrayOfPeople = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
[tableView reloadData];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"ContactCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
}
int index = indexPath.row;
ABRecordRef person = CFArrayGetValueAtIndex(self.people, index);
NSString* firstName = (__bridge_transfer NSString*)ABRecordCopyValue(person,
kABPersonFirstNameProperty);
NSString* lastName = (__bridge_transfer NSString*)ABRecordCopyValue(person,
kABPersonLastNameProperty);
NSString *name = [NSString stringWithFormat:@"%@ %@", firstName, lastName];
cell.textLabel.text = name;
return cell;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.arrayOfPeople.count;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
id person = [self.arrayOfPeople objectAtIndex:indexPath.row];
if (cell.accessoryType == UITableViewCellAccessoryNone) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[self.selectedPeople addObject:person];
} else if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
cell.accessoryType = UITableViewCellAccessoryNone;
[self.selectedPeople removeObject:person];
}
NSLog(@"%@", self.selectedPeople);
}
@end
Cela montre l'ensemble addressbook dans un tableView, puis en sélectionnant met une coche à côté du contact et les ajoute à un NSSet. Désélectionner supprime la coche et supprime l'entrée du NSSet. J'ajoute l'ensemble ABPerson au NSSet de sorte que vous devrez toujours utiliser l'API C pour l'utiliser plus tard.
C'est exactement ce dont j'avais besoin. Je suis capable d'ajouter les utilisateurs à un 'NSSet' à partir de là et de m'assurer qu'ils ne sont ajoutés qu'une seule fois. Une chose à ce sujet, il n'y a aucune indication à l'utilisateur que quelque chose s'est produit ... est-il un moyen d'ajouter une "coche" ou quelque chose à côté de la ligne sélectionnée et de l'enlever si désélectionné? –
Ça, je ne suis pas sûr. Je me demandais moi-même. Je pensais que vous pourriez être en mesure d'accéder au contrôleur de vue de la table, mais il ne semble pas être exposé. Le contrôleur de sélecteur de personnes est une sous-classe de contrôleur de navigation. Si vous voulez le rendre plus évident, cela pourrait prendre plus de travail. –
Je pense que je devrais utiliser 'ABAddressBookCopyArrayOfAllPeople' et ensuite faire un TableView personnalisé à partir de là pour faire ce que je veux faire. Je vais vous faire savoir ce que je viens avec. –