0

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

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

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

4

1 回答 1

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 文件中,在@interface 声明<ChildViewDelegate>之后添加“” ...即UIViewController

@interface ParentViewController : UIViewController <ChildViewDelegate>

4)

实现“ doSomethingWith:”方法。

5)

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

6)

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

[delegate doSomewthingWith: thisString];
于 2012-06-05T02:26:51.757 回答