0

在此先感谢您的帮助!

在我的项目的主 ViewController.m 中,我添加了一个自定义的 tableView,如下所示:

messageController = [[MyMessagesController alloc] initWithStyle:UITableViewStylePlain];
[self addChildViewController:messageController];
[self.view addSubview:messageController.view];

然后,在 MyMessagesController.m 部分 tableView didSelectRowAtIndexPath: 我想编写将在创建它并添加为 childViewController 的 ViewController.m 中生效的代码。

如何从 MyMessagesController.m 访问 ViewController.m 的功能?

我可以以某种方式使其成为委托,以便我可以调用 [delegate functionName]; 吗?我可以将信息传递回 ViewController.m 吗?通过发送 NSString 或 NSArray 或其他任何东西选择了表中的哪些行?

4

2 回答 2

1

是的,使用委托,如果您不确定如何最好地做到这一点,这里是 Apple 关于委托编程的一个很好的参考

于 2013-01-29T18:53:28.730 回答
0

明白了,下面是你如何将一个 viewController 变成另一个的委托:

在父控制器的 .h 中 -

@interface ViewController : UIViewController <NameOfDelegate> {

在父控制器的 .m 中,创建新视图后 -

newViewController.delegate = self;

并且:

- (void)functionToCall:(id)sender {
    NSLog(@"Function Called!!!");
}

在您添加的 newViewController 的 .h 中 -

@protocol NameOfDelegate;

@interface newViewController : UIViewController/OR/TableViewController {
    id <NameOfDelegate> delegate;
}

@property (nonatomic, strong) id <NameOfDelegate> delegate;

@end

@protocol NameOfDelegate
- (void)functionToCall:(id)sender;
@end

在 newViewController 的 .m 中 -

@implementation newViewController

@synthesize delegate;

当您准备好在您的委托中调用该函数时 -

[delegate functionToCall:self];
于 2013-01-29T19:30:13.013 回答