繁体   English   中英

从一个类调用方法并在另一个类中使用

[英]Calling a Method from one class and used in another class

我在ViewController中有一个方法来绘制按钮。 在ViewController2中,我想调用该方法并绘制按钮。

在ViewController.h中

@interface ViewController : UIViewController

-(void)method;
@end

ViewController.m

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}

-(void)method{
    UIButton*Touch1= [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [Touch1 addTarget:self action:@selector(TouchButton1:) forControlEvents:UIControlEventTouchUpInside];
    [Touch1 setFrame:CGRectMake(50,50, 100, 100)];
    Touch1.translatesAutoresizingMaskIntoConstraints = YES;
    [Touch1 setBackgroundImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal];
    [Touch1 setExclusiveTouch:YES];
    [self.view addSubview:Touch1];

    NSLog(@"hi ");
}

-(void)TouchButton1:(UIButton*)sender{

    NSLog(@"hi again");

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

然后我试图从ViewController2调用

- (void)viewDidLoad {
    [super viewDidLoad];
    ViewController * ViewCon = [[ViewController alloc]init];
    [ViewCon method];
}

NSLog显示正确的文本,但未创建任何按钮。 我怎么了

谢谢

使用可以从两个视图控制器调用的类方法创建一个单独的类(例如,称为Utils ):

@implementation Utils

+(void)methodForView:(UIView *)view
{
    UIButton*Touch1= [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [Touch1 addTarget:self action:@selector(TouchButton1:) forControlEvents:UIControlEventTouchUpInside];
    [Touch1 setFrame:CGRectMake(50,50, 100, 100)];
    Touch1.translatesAutoresizingMaskIntoConstraints = YES;
    [Touch1 setBackgroundImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal];
    [Touch1 setExclusiveTouch:YES];
    [view addSubview:Touch1];
}

@end

并这样称呼它:

- (void)viewDidLoad {
    [super viewDidLoad];
    [Utils methodForView:self.view];
}

或者更好的方法是,在UIViewController -subclass中实现该方法,然后从该基类派生所有其他视图控制器。

我认为这个问题是由“方法”上“自我”的范围引起的。 您的按钮已添加到defirstView中,而不是在secondView中。 要执行您想做的事情,您将必须传递想要添加按钮的范围。 就像@trojanfoe提供的示例一样。

-(void)method:(UIView *)_view {
    UIButton*Touch1= [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [Touch1 addTarget:self action:@selector(TouchButton1:) forControlEvents:UIControlEventTouchUpInside];
    [Touch1 setFrame:CGRectMake(50,50, 100, 100)];
    Touch1.translatesAutoresizingMaskIntoConstraints = YES;
    [Touch1 setBackgroundImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal];
    [Touch1 setExclusiveTouch:YES];
    [_view addSubview:Touch1];

    NSLog(@"hi ");
}

在第二个视图中,您可以调用:

 ViewController * ViewCon = [[ViewController alloc]init];
[ViewCon method:self.view];

我认为这就是问题,希望对您有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM