2013-01-07 75 views
0

我有一個視圖控制器和一個類(我正在使用故事板)。我如何從類中更改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); 

使用此代碼不改變文字。我應該做些什麼呢?

編輯:這樣的進度條和標籤在視圖控制器的.h文件中的樣子:

@property (nonatomic, strong) IBOutlet UIProgressView *progressBar; 
@property (nonatomic, strong) IBOutlet UILabel *progressLabel; 

而且他們完全在Interface Builder連接起來。

+0

你應該告訴我們更多關於'ViewController'類。 'progressLabel'是一個'IBOutlet'嗎?如果是這樣,你只是在這裏分配/初始化實例,它不會加載xib,因此插座將永遠不會被插入。 – ipmcc

+0

檢查progressBar和progressLabel的連接是否正確。 – Zen

+0

我認爲問題與你的ViewController對象有關。在這裏你已經創建了ViewController的新實例。這是你在屏幕上顯示你的觀點的同一個對象嗎? – OMK

回答

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]; 
} 
+0

我已經相應地改變了這一點。但標籤的文字仍然不會更新。 –

+0

代碼看起來很好。也許這與你如何分配進度標籤有關。進度條是否正確更新? –

+0

進度條不會更新。如果這有什麼區別,我正在使用Storyboard? (我是他們的新手) –

0

是財產綜合字符串,然後設置該字符串中的ViewController.mviewWillAppear:方法類

只是把NSString變量ViewController.h文件中像波紋管..

@property (nonatomic, retain) NSString *progressText; 

synthesizeViewController.m文件中像波紋管..

@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); 

我希望這對你有幫助...

+0

仍不會更新文本不幸的是:( –

+0

你推到viewController的另一個視圖?? –

3

嘗試使用通知來更新標籤文本。

在你的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」

+0

任何人都可以告訴如果這是推薦的方式嗎?它看起來太簡單,不能成爲官方大聲笑工作完美壽,謝謝發佈! – user2875404

相關問題