如何在子类中调用 UIViewController 的函数?
Posted
技术标签:
【中文标题】如何在子类中调用 UIViewController 的函数?【英文标题】:How to call the function of UIViewController in a subclass? 【发布时间】:2018-03-29 06:04:40 【问题描述】:我在NewLabel.m
中创建了一个名为NewLabel
的UILabel
的子类,代码如下
+ (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 的子类在调用 super 之前可以在 viewDidLoad 中进行一些初始化吗?
drawRect 在 UIView 子类上被调用,但不在 UIViewController 上
如何在许多子类中使用 UITableViewDelegate 子类化 UIViewController