我尝试更改读取并从UILabel更改位置。这个UILabel是在Interface Builder中创建的,现在我想在MainVieController类中调用一个方法时读取并更改另一个类中的位置。
但我怎么能这样做,我已经阅读了几个论坛,但我无法让它发挥作用。这里还有一些示例代码。我希望有人可以帮助我。
MainViewController.h
#import <UIKit/UIKit.h>
@class NewClass;
@interface MainViewController : UIViewController {
UILabel *daLabel;
}
@property (nonatomic, retain) IBOutlet UILabel *daLabel;
@end
MainViewController.m
#import "MainViewController.h"
#import "NewClass.h"
@implementation MainViewController
@synthesize daLabel;
- (void)viewDidLoad {
[super viewDidLoad];
NewClass *anotherClass = [[NewClass alloc] init];
[anotherClass test];
}
@end
NewClass.h
#import <Foundation/Foundation.h>
@class MainViewController;
@interface NewClass : NSObject {
}
@end
NewClass.m
#import "NewClass.h"
#import "MainViewController.h"
@implementation NewClass
- (void)test {
MainViewController *MainController = [[MainViewController alloc] init];
CGRect labelPosition = MainController.daLabel.frame;
NSLog(@"POSITION: %f", labelPosition.origin.x); // Returns 0.000000
}
@end
答案 0 :(得分:5)
我不确定你为什么要在NewClass中创建另一个视图控制器实例,它由视图控制器加载。也许只是在调用测试方法时传递“self”?但是,如果要更改UILabel的位置,只需更改labelPosition,然后将daLabel.frame设置为已修改的labelPosition。例如:
- (void)viewDidLoad {
[super viewDidLoad];
NewClass *anotherClass = [[NewClass alloc] init];
[anotherClass test:self];
}
- (void)test:(MainViewController *)mvc {
CGRect labelPosition = mvc.daLabel.frame;
NSLog(@"POSITION: %f", labelPosition.origin.x); // Returns 0.000000
labelPosition.origin.x = 50;
mvc.daLabel.frame = labelPosition; // Now moved to 50.000000
}