从目标c中的另一个viewcontroller调用方法

时间:2012-06-05 02:17:18

标签: objective-c

我有一个控制器(名称:Parent.m),扩展了UIViewController,我添加了另一个视图(controller(名称:Child.m)),其中包含一个表视图。

单击Child.m表中的一行时,我想调用Parent.m类中的方法。我不想创建Parent.m的新实例。

有人可以解释我是如何做到这一点的。我需要在两者之间定义协议吗?如果是这样,有人可以解释我是怎么做的。

1 个答案:

答案 0 :(得分:4)

如果您正在使用UINavigationController,则可以通过在子视图控制器中执行类似操作来获取父视图控制器。

ParentViewcontroller * parentView = (ParentViewcontroller *)[self.navigationController.viewControllers lastObject]; 

如果您没有使用UINavigationController,则可以使用通知(可能过度杀伤)。或键值从父级到子级的观察(即根据子视图控制器中的更改来更改某事物的显示或值)。

或者,这里最直接的做法可能是将父项设置为子项的委托目标。

1)

在ChildViewcontroller.h文件中,创建一个如下所示的协议:

@protocol ChildViewDelegate

- (void) doSomethingWith: (NSString *) thisString;

@end

2)

在ChildViewcontroller中创建一个委托属性(您将其设置为父视图)。

3)

在ParentViewcontroller.h文件中,在<ChildViewDelegate> @interface声明之后添加“UIViewController”...即

@interface ParentViewController : UIViewController <ChildViewDelegate>

4)

实施“doSomethingWith:”方法。

5)

当您从父实例化实例化/创建Child Viewcontroller时,不要忘记将委托设置为父代。

6)

最后,当您想要从孩子向父母发送消息时,它可能很简单:

[delegate doSomewthingWith: thisString];