#iphone #objective-c #ipad #uitableview #uipopover
#iPhone #objective-c #iPad #uitableview #uipopover
Вопрос:
У меня есть UITableView в UINavigationController. На панели навигации у меня есть кнопка под названием добавить. При нажатии этой кнопки отображается UIPopoverController, где пользователь может вводить данные, которые будут добавлены в виде новой строки / ячейки в UITableView. Моя проблема в том, как я могу добавить новую ячейку в UITableView из UIPopover? Должен ли я передавать данные массива корневому контроллеру UIPopover?
Комментарии:
1. Я думаю, это будет зависеть от источника данных вашего табличного представления. Если вы работали с модальными представлениями на iPhone, чтобы сделать то же самое, это должно быть похоже на шаблон всплывающего окна на iPad.
2. да, это было бы то же самое с модальным представлением.. вопрос в том, как? и когда вы говорите, что это зависит от источника данных, что это значит? Я хочу иметь возможность выполнять insertRowsAtIndexPath из всплывающего окна.. это основная цель.
Ответ №1:
Для этого есть два решения, о которых я знаю. Одним из них было бы отправить уведомление из всплывающего окна на корневой контроллер и применить необходимый код для обновления TableView в handleNotification
методе.
Другой, который я лично использую, заключается в настройке протокола делегирования для всплывающего окна. Вам нужно будет настроить это примерно так:
@protocol PopoverDelegate
- (void)addNewCell; // you can add any information you need to pass onto this if necessary such as addNewCellWithName:(NSString *)name, etc.
@end
@interface MyPopoverViewController..... {
id <PopoverDelegate> delegate;
// the rest of your interface code;
}
@property (nonatomic, retain) id delegate;
// any other methods or properties;
@end
Затем в заголовочный файл вашего корневого контроллера просмотра вам нужно добавить делегат
@interface RootViewController .... <PopoverDelegate> {
Затем в файле реализации вашего корневого контроллера просмотра назначьте делегат popover при создании его экземпляра. Например:
MyPopoverViewController *vc = [[MyViewController alloc] init];
vc.delegate = self; // this is where you set your protocol delegate
myPopover = [[UIPopoverController alloc] initWithContentViewController:vc];
myPopover.delegate = self;
[vc release];
Наконец, вы добавите свой метод протокола где-нибудь в коде
- (void)addNewCell {
// do what you want with the tableView from here
}
Извините, это немного длинновато. Я просто хотел убедиться, что я был тщательным. Надеюсь, это поможет