Objective-c iPhone читает и меняет позицию 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

НовыйКласс.h

#import <Foundation/Foundation.h>
@class MainViewController;

@interface NewClass : NSObject {

}

@end

НовыйКласс.м

#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

person Flappy    schedule 14.11.2010    source источник
comment
Возможно, вы захотите переименовать этот вопрос; ни один из тегов не помогает вообще. Вы даже не упомянули язык и среду, в которой это должно быть.   -  person TeaDrivenDev    schedule 14.11.2010


Ответы (1)


Я не уверен, почему вы создаете еще один экземпляр вашего контроллера представления в NewClass, который загружается вашим контроллером представления. Может быть, просто передать «я» в вызове тестового метода? Но если вы хотите изменить положение вашего 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
}
person spstanley    schedule 14.11.2010
comment
Потрясающе! Много дней я искал ответ на это! Благодарю вас! - person Flappy; 14.11.2010