如何委托回上一个视图控制器

时间:2011-04-12 15:57:56

标签: iphone objective-c delegates

这是我在我的应用上的导航

1)homescreenview controller - > composemessageviewcontroller(我可以使用委托将数据发送回homescreenview)

2)homescreenview controller - > messageslistcontroller(tableview) - > detailmessageviewcontroller(这是我的回复按钮所在的位置)。

我的问题是,当我点击回复时,我想将信息发送回带有委托的homescreenviewcontroller。我怎么能这样做?

提前致谢。

---- UPDATE

@XJones,感谢详细的解释。这是推送detailview时应该做的事情吗?如果我错了,请纠正我。

  • (无效)pushDetailMessageController { DetailMessagetController * detailmessage = [[DetailMessagetController alloc] init]; detailmessage.delegate = self; //将messageListController推送到导航控制器 [详细发布]; }

3 个答案:

答案 0 :(得分:0)

如何在messageslistcontroller中添加方法?我个人会将委托“homescreenview”添加到detailmessageviewcontroller,因为messageslistcontroller与回复没有任何关系,而且显然是homescreenviewcontroller。

在messageslistcontroller中创建detailmessageviewcontroller时执行以下操作:

detailmessageviewcontroller.homeScreenDelegate = self.delegate;

答案 1 :(得分:0)

一种方法(没有授权)

当你使用navigationController时,所以 [[self.navigationController viewControllers]objectAtIndex:0]将始终返回homeScreenViewController .....你可以使用此对象......

谢谢,

答案 2 :(得分:0)

这是一个非常普遍的问题。你基本上是在询问如何将信息从一个控制器传递到另一个控制器。有不同的方法可以做到这一点,一个协议(代表通常通过什么沟通)就是其中之一。你可以做的最快的事情就是在你的代码中做出可能有问题的假设,就是在你推动messageListController然后detailMessageController时传递homeScreenController。您需要在messageListControllerdetailMessageController中定义iVar和属性才能执行此操作。

类似的东西:

messageListController.h中的

#import "HomeScreenController.h"

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

@property (nonatomic, assign)    HomeScreenController *    homeScreenController;

homeScreenController的相同iVar和属性添加到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作为支持该协议的委托传递。