如何从视图控制器中包含的视图调用方法?

Posted

技术标签:

【中文标题】如何从视图控制器中包含的视图调用方法?【英文标题】:How Do I call a method from a view contained in a view controller ? 【发布时间】:2014-01-21 15:22:49 【问题描述】:

我有一个UIViewController,其中包含一个UIView Subclass,我想从子类中调用一个在包含它的UIViewController 中定义的方法。我不想实例化视图控制器的新实例,因为它包含我在尝试调用的方法中需要的信息。这是一个试图进一步澄清的图表:

(UIViewController) MainView --> 有方法updateView

(UIView) SubView ---> 有播放动画的按钮,有完成块

我想在完成块中调用UpdateView

【问题讨论】:

这意味着您的视图控制器可能应该在创建视图时将自己设置为您的视图的委托,并且您的视图应该将其作为委托方法调用。 看看:***.com/questions/626898/… 如果你将完成块从 mainView 传递给 subView,那么在该块中调用该方法。 【参考方案1】:

我认为你可以在你的 Subview 中设置一个协议,它可以由你的 ViewController 实现

你的 SubView.h

@class SubView;

@protocol SubViewDelegate <NSObject>
- (void)actionToPromoteToViewController: (NSString *)exampleString isSelected:(BOOL)exampleBool;
@end

然后,在您的 ViewController.h 中:

@interface MainViewController : UIViewController <SubViewDelegate>

和你的 ViewController.m,实现方法。

- (void)actionToPromoteToViewController: (NSString *)exampleString isSelected:(BOOL)exampleBool
   // Method Implementation


【讨论】:

在这种情况下肯定是代表。 明白了-感谢您的帮助。【参考方案2】:

对于“正确”实现,您需要在 UIView Subclass 中引用视图控制器:

@interface UIViewSubclass : UIView
...
@property UIViewControllerSubclass *viewController;
@end

然后将此viewController 引用设置为您的视图控制器并在完成块中使用它。

如果您想要本地解决方案(而不是使用属性扩展 UIViewSubclass),请查看以下答案:https://***.com/a/3732812/326017

【讨论】:

以上是关于如何从视图控制器中包含的视图调用方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何打开框架中包含的视图控制器作为 iOS 的静态库?

如何获取标签栏控制器中包含的所有视图控制器? iphone开发

从 UIPageViewContoller 中包含的视图设置 UINavigationBar 标题

如何从模态视图控制器调用呈现视图控制器的方法

如何在 iOS 中滑动 UIViewController 中包含的子视图控制器?

从模态视图控制器调用方法