Как делегировать обратно к предыдущему контроллеру veiwcontroller - PullRequest
0 голосов
/ 12 апреля 2011

вот моя навигация в моем приложении

1) контроллер homescreenview -> composemessageviewcontroller (я могу использовать делегат для отправки данных обратно в homescreenview)

2) контроллер homescreenview -> messageslistcontroller (tableview) -> detailmessageviewcontroller (где находится кнопка моего ответа).

моя проблема в том, что когда я нажимаю кнопку ответа, я хочу отправить информацию обратно в homescreenviewcontroller с делегатом.как я могу это сделать?

Заранее спасибо.

---- ОБНОВЛЕНИЕ

@ XJones, спасибо за подробное объяснение.это то, что следует делать, когда я нажимаю detailview?исправьте меня, если я ошибаюсь.

  • (void) pushDetailMessageController {DetailMessagetController * detailmessage = [[DetailMessagetController alloc] init];detailmessage.delegate = self;// вставляем messageListController в контроллер навигации здесь [подробный выпуск];}

Ответы [ 3 ]

0 голосов
/ 12 апреля 2011

Один подход (без делегирования)

, поскольку вы используете navigationController, поэтому [[self.navigationController viewControllers]objectAtIndex:0] всегда вернет вам homeScreenViewController ..... вы можете использовать этот объект ....

Спасибо,

0 голосов
/ 12 апреля 2011

это очень общий вопрос.Вы в основном спрашиваете, как передать информацию с одного контроллера на другой контроллер.Есть разные способы сделать это, протокол (через который делегат обычно общается) является одним из них.Самая быстрая вещь, которую вы можете сделать, не делая предположений в своем коде, что может быть проблематичным позже, - это передать homeScreenController, когда вы нажимаете messageListController, а затем detailMessageController.Для этого вам нужно определить iVar и свойство в messageListController и detailMessageController.

Что-то вроде:

в messageListController.h:

#import "HomeScreenController.h"

@interface messageListController : UITableViewController {
    // your iVars
    HomeScreenController *homeScreenController;
@end

@property (nonatomic, assign)    HomeScreenController *    homeScreenController;

добавить тот же iVar и свойство для homeScreenController в detailMessageController.

в homeScreenController.h:

- (void)pushMessageListController
{
    MessageListController *messageListController = [[MessageListController alloc] init];
    messageListController.homeScreenController = self;
    // push messageListController onto navigation controller here
    [messageListController release];
}

в messageListController сделать то же самое, что и выше, при создании и нажатииdetailMessageController.Теперь, в detailMessageController вы можете отправлять сообщения непосредственно на homeScreenController.

Если вы хотите обобщить вышеприведенную реализацию, чтобы ваши контроллеры не были специально осведомлены друг о друге, тогда вы можете определить протокол и передать homeScreenController в качестве делегата, поддерживающего этот протокол.

0 голосов
/ 12 апреля 2011

Как насчет добавления метода в messageslistcontroller? Лично я добавил бы делегат "homescreenview" к контроллеру detailmessageview, поскольку контроллер списков сообщений не имеет никакого отношения к ответу, и, к сожалению, контроллер homescreenview.

когда вы создаете detailmessageviewcontroller в messageslistcontroller, сделайте следующее:

detailmessageviewcontroller.homeScreenDelegate = self.delegate;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...