【问题标题】:How to call the function of UIViewController in a subclass?如何在子类中调用 UIViewController 的函数?
【发布时间】:2023-03-05 05:54:01
【问题描述】:

我在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 非常感谢。

标签: ios objective-c uiviewcontroller uilabel


【解决方案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];

【讨论】:

  • 非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
  • 1970-01-01
相关资源
最近更新 更多