如何在子类中调用 UIViewController 的函数?

Posted

技术标签:

【中文标题】如何在子类中调用 UIViewController 的函数?【英文标题】:How to call the function of UIViewController in a subclass? 【发布时间】:2018-03-29 06:04:40 【问题描述】:

我在NewLabel.m 中创建了一个名为NewLabelUILabel 的子类,代码如下

+ (NewLabel*)addLabelIntoView:(UIView*)view

  NewLabel *label = [[NewLabel alloc] init];
  //some codes
  [view addSubview:label];
  [NSTimer scheduledTimerWithTimeInterval:1.0f target:view selector:@selector(callActionInVC) userInfo:nil repeats:NO];
  return label;

还有一个UIViewController,代码在UIViewController.m

- (void)viewDidLoad 
    [NewLabel addLabelIntoView:self.view]


- (void)callActionInVC 
    //do some actions

我想在NewLabel.m中调用UIViewController.m的函数callActionInVC,在NewLabel.m中,target:view不对,应该改成什么?子类中 UIViewController 的目标是什么?

或者有什么想法可以提出这个需求?

【问题讨论】:

使用委托模式 设置target: <Your ViewController> selector:@selector(<YourViewController.method>) @MahendraGP 非常感谢。 【参考方案1】:

target 错误

[NSTimer scheduledTimerWithTimeInterval:1.0f target:view selector:@selector(callActionInVC) userInfo:nil repeats:NO];

您应该将目标设置为控制器。

 [NSTimer scheduledTimerWithTimeInterval:1.0f target:<your controller> selector:@selector(callActionInVC) userInfo:nil repeats:NO];

您可能需要创建一个category 来获取控制器。

- (UIViewController *)fy_parentController
    UIResponder *responder = [self nextResponder];
    while (responder) 

        if ([responder isKindOfClass:[UIViewController class]]) 
            return (UIViewController *)responder;
        
        responder = [responder nextResponder];
    
    return nil;

最终代码如下所示:

[NSTimer scheduledTimerWithTimeInterval:1.0f target:view.fy_parentController selector:@selector(callActionInVC) userInfo:nil repeats:NO];

【讨论】:

非常感谢。

以上是关于如何在子类中调用 UIViewController 的函数?的主要内容,如果未能解决你的问题,请参考以下文章

UIViewController 子类调用方法

UIViewController 的子类在调用 super 之前可以在 viewDidLoad 中进行一些初始化吗?

drawRect 在 UIView 子类上被调用,但不在 UIViewController 上

如何在许多子类中使用 UITableViewDelegate 子类化 UIViewController

如何在 swift 中使用 .xib 创建 UIViewController 子类?

如何在 UIviewController 子类中禁用 UIMenuControll(剪切、复制、粘贴、全选、删除)?