我希望代码要做的是当按下按钮时它会运行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
答案 0 :(得分:1)
编辑:正如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];
}