How do I set an ABPeoplePickerNavigationController's prompt?
-
19-09-2019 - |
Question
This is the code I'm using to call the people picker, but the prompt label text doesn't change:
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
picker.displayedProperties = [NSArray arrayWithObjects: [NSNumber numberWithInt:kABPersonEmailProperty], nil];
picker.navigationItem.prompt = @"Choose a contact to...";
[self presentModalViewController:picker animated:YES];
Solution
You can change the title with:
picker.navigationBar.topItem.title = @"iPhone Contacts";
And you can change the prompt with:
picker.navigationBar.topItem.prompt = @"iPhone Contacts";
OTHER TIPS
There is a key piece of information missing in the other answers, and not quite obvious. You need to set the prompt after the line:
[self presentModalViewController:picker animated:YES];
So, if you do it like this, it works:
[self presentModalViewController:picker animated:YES];
picker.navigationBar.topItem.prompt = @"Choose a contact to...";
I've just stumbled upon a way to do this. However, I'm not sure it's the best way. Just replace in the code above the line
picker.navigationItem.prompt = @"Choose a contact to...";
With
picker.navigationBar.topItem.prompt = @"Choose a contact to...";
If you're sub-classing the ABPeoplePickerNavigationController you need to set this once the view controller is pushed. This is in effect what achieving the same thing that Johan suggested, but from within the class.
In the ABPeoplePickerNavigationController implement the following delegate method like so:
-(void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
{
[[[self navigationBar] topItem] setPrompt:@"test"];
}