从另一个类更改UILabel的文本
我有一个视图控制器和一个类(我正在使用故事板)。 如何从类中更改UILabel
(在视图控制器中)的文本? 我试过这个,但无济于事:
ViewController *mainView = [[ViewController alloc] init]; [mainView view]; [mainView.progressBar setProgress:integer animated:YES]; NSLog(@"Updated Progress Bar"); NSString *progressLabelText = [NSString stringWithFormat:@"%@ out of %i followers", userString, [self.followers count]]; [mainView.progressLabel setText:progressLabelText]; NSLog(@"Updated Progress Label Text: %@", progressLabelText);
使用此代码不会更改文本。 我应该做什么呢?
编辑:ViewController的.h文件中的进度条和标签如下所示:
@property (nonatomic, strong) IBOutlet UIProgressView *progressBar; @property (nonatomic, strong) IBOutlet UILabel *progressLabel;
它们在Interface Builder中完全链接起来。
使用delegate
在classes
或viewcontrollers
之间进行messaging
。
请参阅协议和代理的基础知识链接。
尝试使用通知更新Lable文本。
在你的viewController中写这个:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateLabel) name:@"lblUpdate" object:nil]; and selector is : -(void)updateLabel { self.lblObject.text = @"Your updated text" }
现在在你的课程中使用post通知来调用它:
[[NSNotificationCenter defaultCenter] postNotificationName:@"lblUpdate" object:nil];
记得使用相同的通知名称“lblUpdate”
just属性合成字符串,然后在ViewController.m
类的viewWillAppear:
方法中设置该字符串
只需在ViewController.h
文件中获取NSString
变量,如下所示..
@property (nonatomic, retain) NSString *progressText;
并在ViewController.m
文件中synthesize
这个,如下所示..
@synthesize progressText;
之后在viewDidLoad:
方法中,只需将开头的文本设置为progressLableText
,如下所示…
- (void)viewDidLoad { progressText = @"Your Text"; [progressLabel setText:progressText]; }
以及在viewWillAppear:
设置上面的文字……
- (void)viewWillAppear:(BOOL)animated { [progressLabel setText:progressText]; }
在你的代码中只需更改类似下面的内容..
ViewController *mainView = [[ViewController alloc] init]; [mainView view]; [mainView.progressBar setProgress:integer animated:YES]; NSLog(@"Updated Progress Bar"); NSString *progressLabelText = [NSString stringWithFormat:@"%@ out of %i followers", userString, [self.followers count]]; mainView.progressText = progressLabelText; [mainView.progressText retain]; NSLog(@"Updated Progress Label Text: %@", progressLabelText);
我希望这对你有帮助…
但是使用delegate
来进行回调。 在您的spamchecker.h
添加:
@protocol SpamCheckerDelegate -(void)updateText:(NSString*)newText; @end @property (nonatomic, weak) id delegate;
在您需要的spamchecker.m
中添加:
[self.delegate updateText:@"newText"];
然后在你的mainView.h
添加:
@interface MainView : UIViewController
在你的mainview.m
添加:
spamchecker.delegate = self;
并实现如下方法:
-(void)updateText:(NSString*)newText { [self.progressLabel setText:progressLabelText]; }