Estoy tratando de seguir la guía de progtwigción de la agenda de direcciones de Apple, y tengo dudas sobre peoplePickerController. La foto de ejemplo del tutorial de Apple tiene el button 'más' en la esquina superior derecha que parece permitirle al usuario agregar nuevo contacto a través de peoplePickerController.
Llamé a ABPeopleNavigationControllerPicker vía
- (void)showPicker { ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; picker.peoplePickerDelegate = self; [self presentViewController:picker animated:YES completion:nil]; }
Pero hay un button de cancelar en la esquina superior derecha de la pantalla en lugar del button de más. ¿Hay alguna opción para cambiar el button o permitir que el usuario agregue nuevo contacto a través de este controller de vista?
Después de hacer una búsqueda en google durante bastante time, a continuación se encuentra lo que encontré. Así que traté de cambiar el button de barra mediante progtwigción …
- (void)addPerson { ABNewPersonViewController *newPersonVC = [[ABNewPersonViewController alloc] init]; newPersonVC.newPersonViewDelegate = self; UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:newPersonVC]; [self presentViewController:nc animated:YES completion:nil]; } - (void)showPicker { ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; picker.topViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPerson)]; picker.peoplePickerDelegate = self; [self presentViewController:picker animated:YES completion:nil]; }
- (void)addPerson { ABNewPersonViewController *newPersonVC = [[ABNewPersonViewController alloc] init]; newPersonVC.newPersonViewDelegate = self; UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:newPersonVC]; [self presentViewController:nc animated:YES completion:nil]; } - (void)showPicker { ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; picker.topViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPerson)]; picker.peoplePickerDelegate = self; [self presentViewController:picker animated:YES completion:nil]; }
Sin embargo, de alguna manera el button de barra todavía se fija como "cancelar" en lugar de "agregar" …
En iOS 7, necesitaba configurar esos botones más adelante …
- (void)showPicker { ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; picker.peoplePickerDelegate = self; [self presentViewController:picker animated:YES completion:nil]; [picker.topViewController setEdit:YES]; [self performSelector:@selector(setThemBuddons:) withObject:picker afterDelay:0.1]; } -(void)setThemBuddons:(ABPeoplePickerNavigationController*)picker; { picker.topViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPerson)]; }
No importa, ahora funcionó. Parece que tengo que presentar el ViewController antes de anular su button …
- (void)showPicker { ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; picker.peoplePickerDelegate = self; [self presentViewController:picker animated:YES completion:nil]; [picker.topViewController setEdit:YES]; picker.topViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPerson)]; }
Solo necesitas una pequeña modificación en el método addPerson.
Para mostrar contactos:
– (vacío) showPicker
{
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; picker.peoplePickerDelegate = self; [self presentViewController:picker animated:YES completion:nil]; [picker.topViewController setEdit:YES]; [self performSelector:@selector(addContact:) withObject:picker afterDelay:0.1];
}
– (void) addContact: (ABPeoplePickerNavigationController *) selector;
{
picker.topViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPerson)];
}
Con este código, obtendrá un signo más en la esquina superior derecha para agregar los contactos.
Estamos usando @selector para esto.
– (void) addPerson
{
ABNewPersonViewController *newPersonVC = [[ABNewPersonViewController alloc] init]; newPersonVC.newPersonViewDelegate = self; UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:newPersonVC];
// Aquí está el código de la línea que hace el trabajo. Al usar self.presentedViewController podemos // get la pantalla de contacto de agregar, de lo contrario obtendremos el error como jerarquía de vista vacía.
[self.presentedViewController presentViewController:nc animated:YES completion:nil];
}