[英]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.