Objective-c iPhone从另一个类读取和更改UILabel位置

时间:2010-11-14 15:43:20

标签: iphone objective-c class position uilabel

我尝试更改读取并从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

1 个答案:

答案 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
}