Обмен данными UIPopover и UITableView

#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
}
  

Извините, это немного длинновато. Я просто хотел убедиться, что я был тщательным. Надеюсь, это поможет