我有一个扩展 UIViewController 的控制器(名称:Parent.m),我向其中添加了另一个视图(控制器(名称:Child.m)),其中包含一个表视图。
单击 Child.m 表上的一行时,我想调用 Parent.m 类中的方法。我不想创建 Parent.m 的新实例。
有人可以解释我如何做到这一点。我需要在两者之间定义一个协议吗?如果是这样,有人可以解释我怎么做。
我有一个扩展 UIViewController 的控制器(名称:Parent.m),我向其中添加了另一个视图(控制器(名称:Child.m)),其中包含一个表视图。
单击 Child.m 表上的一行时,我想调用 Parent.m 类中的方法。我不想创建 Parent.m 的新实例。
有人可以解释我如何做到这一点。我需要在两者之间定义一个协议吗?如果是这样,有人可以解释我怎么做。
如果您使用的是 UINavigationController,则可以通过在子视图控制器中执行类似操作来获得父视图控制器。
ParentViewcontroller * parentView = (ParentViewcontroller *)[self.navigationController.viewControllers lastObject];
如果您不使用 UINavigationController,则可以使用通知(可能有点矫枉过正)。或从父级到子级的键值观察(即根据子视图控制器中的更改更改某些内容的显示或值)。
或者,这里最直接的做法可能是将父级设置为子级的委托目标。
1)
在您的 ChildViewcontroller.h 文件中,创建一个如下所示的协议:
@protocol ChildViewDelegate
- (void) doSomethingWith: (NSString *) thisString;
@end
2)
在您的 ChildViewcontroller 中创建一个委托属性(您将其设置为父视图)。
3)
在您的 ParentViewcontroller.h 文件中,在@interface 声明<ChildViewDelegate>
之后添加“” ...即UIViewController
@interface ParentViewController : UIViewController <ChildViewDelegate>
4)
实现“ doSomethingWith:
”方法。
5)
当您从父级实例化/创建子 Viewcontroller 时,不要忘记将委托设置为父级。
6)
最后,当您想从孩子向父母发送消息时,它可能很简单:
[delegate doSomewthingWith: thisString];