ABPeoplePickerNavigationController и UITableViewController в UITabBarController - PullRequest
0 голосов
/ 07 марта 2011

Пожалуйста, смотрите мой собственный ответ ниже, я разобрался в нем после нескольких часов. Надеюсь, я сэкономлю время.

У меня в настоящее время есть кнопка на моем пользовательском интерфейсе, которая модально представляет ABPeoplePickerNavigationController, который прекрасно работает. Я хочу расширить это, чтобы реализовать избранное и последние, так что, когда пользователь нажимает кнопку, я представляю UITabBarController с ABPeoplePickerNavigationController на одной вкладке, а затем две другие вкладки с избранными и последними (которые, я предполагаю, будут UITableViewControllers. Я в основном хочу, чтобы контроллер панели вкладок вел себя как модальная версия встроенного в телефон приложения для контактов, избранного и вкладок (но не только для телефонных номеров).

Я искал все, пытаясь найти решение о том, как это сделать (я новичок в TabBarControllers), и до сих пор пытался сделать это программно с небольшим успехом, а в Интерфейсном Разработчике с абсолютно никакой Успех, все, что я когда-либо вижу, это белый экран.

Есть ли какая-нибудь библиотека, которая уже делает что-то похожее на это, что я просто не могу найти для контактов и избранных?

Вот разбивка того, что я пробовал в обоих методах, и как это работает:

Программное: Я в основном создаю ABPeoplePickerNavigationController, как будто собирался представить его только модально, но вместо этого добавляю его в экземпляр UITabBarController, используя метод setViewControllers. Когда я представляю это, на вкладке написано «Группы», и я не могу понять, как изменить значок на системный значок для контактов или изменить поведение нажатия кнопки панели вкладок, чтобы не возвращаться в группы. (встроенное приложение для телефона не достигает этого уровня при нажатии кнопки панели вкладок). Как я уже упоминал выше, я в основном хочу, чтобы он работал аналогично встроенному приложению телефона для контактов, избранных и недавних сообщений.

IB: Я перепробовал кучу вещей и всегда получал белый экран только при попытке представить его модально.

1 Ответ

2 голосов
/ 08 марта 2011

У меня есть две вкладки, одна с ABPEoplePickerNavigationController и одна с табличным представлением, работающим прошлой ночью.Я надеюсь, что это помогает кому-то.Обратите внимание, что вам все равно нужно добавить протоколы в текущий контроллер представления для средства выбора и два для представления таблицы, а затем добавить функции делегата для каждого в ваш код.Если вы не знаете, какие протоколы следует принять или какие функции написать, ознакомьтесь с документами Apple Dev для каждого из них.

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
UITabBarItem *peoplePickerTabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemContacts tag:0];
picker.tabBarItem = peoplePickerTabBarItem;
UITableViewController *tvc = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
tvc.tableView.delegate = self;
tvc.tableView.dataSource = self;
UINavigationController *nvc = [[UINavigationController alloc] initWithRootViewController:tvc];
UIBarButtonItem *uibbiCancel = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(cancelTable)];
tvc.navigationItem.rightBarButtonItem = uibbiCancel;
tvc.title = @"Recents";
UITabBarItem *nvcTabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemRecents tag:2];
nvc.tabBarItem = nvcTabBarItem;
tbc = [[UITabBarController alloc] init];
NSArray *sections = [[NSArray alloc] initWithObjects:picker, nvc, nil];
[tbc setViewControllers:sections];
[self presentModalViewController:tbc animated:YES];
[nvcTabBarItem release];
[uibbiCancel release];
[tvc release];
[peoplePickerTabBarItem release];
[picker release];
[nvc release];
[sections release];
[tbc release];
...