【问题标题】: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

【问题讨论】:

  • 这意味着您的视图控制器可能应该在创建视图时将自己设置为您的视图的委托,并且您的视图应该将其作为委托方法调用。
  • 如果你将完成块从 mainView 传递给 subView,那么在该块中调用该方法。

标签: ios objective-c uiview uiviewcontroller


【解决方案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://stackoverflow.com/a/3732812/326017

【讨论】:

    猜你喜欢
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2013-07-02
    • 2021-09-12
    • 1970-01-01
    相关资源
    最近更新 更多