我有一个控制器(名称:Parent.m),扩展了UIViewController,我添加了另一个视图(controller(名称:Child.m)),其中包含一个表视图。
单击Child.m表中的一行时,我想调用Parent.m类中的方法。我不想创建Parent.m的新实例。
有人可以解释我是如何做到这一点的。我需要在两者之间定义协议吗?如果是这样,有人可以解释我是怎么做的。
答案 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];