从另一个班级更改UILabel的文本

时间:2013-01-07 13:11:32

标签: iphone objective-c ios uiviewcontroller 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中完全链接。

4 个答案:

答案 0 :(得分:3)

delegatemessaging之间classes使用viewcontrollers

参考The Basics of Protocols and Delegates链接。

答案 1 :(得分:3)

尝试使用通知更新Lable文本。

你的viewController中的

写下这个:

     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateLabel) name:@"lblUpdate" object:nil];


  and selector is :
   -(void)updateLabel
{
    self.lblObject.text = @"Your updated text"
}

现在在你的课程中使用帖子通知来调用它:

 [[NSNotificationCenter defaultCenter] postNotificationName:@"lblUpdate" object:nil];

请记住使用相同的通知名称“lblUpdate”

答案 2 :(得分:0)

但是使用delegate来进行回调。 在spamchecker.h添加:

@protocol SpamCheckerDelegate <NSObject>
-(void)updateText:(NSString*)newText;
@end

@property (nonatomic, weak) id <SpamCheckerDelegate> delegate;

在您需要的spamchecker.m添加:

[self.delegate updateText:@"newText"];

然后在mainView.h添加:

@interface MainView : UIViewController <SpamCheckerDelegate>

mainview.m添加:

spamchecker.delegate = self;

并实施如下方法:

-(void)updateText:(NSString*)newText
{
    [self.progressLabel setText:progressLabelText];
}

答案 3 :(得分:0)

只是属性合成字符串,然后在viewWillAppear:类<{1}}方法中设置该字符串

只需在ViewController.m文件中获取NSString变量,如bellow ..

ViewController.h

@property (nonatomic, retain) NSString *progressText; synthesize文件中,如下文...

ViewController.m

之后在@synthesize progressText; 方法中,只需将文字设置为viewDidLoad:,如下所示......

progressLableText

并且- (void)viewDidLoad { progressText = @"Your Text"; [progressLabel setText:progressText]; } 也设置了上面的文字......

viewWillAppear:

在您的代码中只需更改类似于下面的内容..

- (void)viewWillAppear:(BOOL)animated
{
    [progressLabel setText:progressText];
}

我希望这对你有帮助......