0

我希望代码做的是,当按下按钮时,它会运行 Label.m 文件中的函数,然后将标签文本设置为“test”。每当我运行它时,代码都会调用该函数,但不会更改标签文本。有人可以帮我修复我的代码或向我展示从类文件中更改标签文本的正确和最简单的方法。

在我的 FirstViewController.h

@interface FirstViewController : UIViewController{
    IBOutlet UILabel *test;
}
@property (nonatomic, retain) IBOutlet UILabel *test;

在我的 FirstViewController.m

#import "Label.h"
-(IBAction)refresh:(id)sender {
    [Label getSchedule];
}

在我的 Label.h

#import "FirstViewController.h"
@interface Label : NSObject
+ (void)getSchedule;


@end

在我的 Label.m

#import "FirstViewController.h"

@implementation Label

+ (void)getSchedule{
    NSLog(@"log");
    FirstViewController *VC = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];

    VC.test.text = @"test";

}


@end
4

1 回答 1

0

编辑:正如 Maddy 在评论中提到的,如果在 viewController 获取所有视图对象之后调用原始海报代码,它就会起作用。实现原始海报想要的简单方法是简单地添加:

self.test.text = @"test";

到 viewControllers viewDidLoad 方法。

无论如何,我会在这里留下我的原始答案,因为我相信它改进了原始海报代码并删除了它的一些依赖项。对于它想要实现的目标来说,它仍然过于复杂,但这种模式可以转移到更合适的场景:


详细说明我的评论:

你的方法

+ (void)getSchedule{
    NSLog(@"log");
    FirstViewController *VC = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];

    VC.test.text = @"test";
}

是一个类方法。所以,它自然会被触发,但是你的 UILabel 实例测试这个实例对此一无所知。此外,您似乎已经创建了自己的类 Label,它是 NSObject 的子类,但实际的标签实例是常规的 UILabel。

我猜你想要做的是这样的:

@interface Label : UILabel
- (void)getSchedule;
@end  

...

@interface FirstViewController : UIViewController
@property (nonatomic, retain) IBOutlet Label *test;

编辑:忘记方法(!)

- (void)getSchedule{
    self.text = @"test";
}

最后在你的 viewController 中......

#import "Label.h"
-(IBAction)refresh:(id)sender {
    [self.test getSchedule];
}
于 2013-11-10T18:58:05.617 回答