2013-05-17 55 views
0

我有一個視圖控制器類First.h/First.m,其中我有一個名爲-(void)ChangeLabelName:(NSString *)title defined在.h文件中的方法。從子類視圖重新加載標籤視圖文本

(in First.m) 
-(void)ChangeLabelName:(NSString *)title 
{ 
    NSLog(@"in set label"); 
    [topheading_label setText:title]; 
} 

現在我有第二個視圖控制器類名爲Second.h/Second.m。添加此視圖控制器作爲一個子視圖到第一視圖控制器喜歡 -

(in First.m) 
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
Second *second = [storyboard instantiateViewControllerWithIdentifier:@"second"]; 
[self.view addSubview:second.view]; 

在second.mi有一種方法命名- (void)call_summary:(id)sender (現在在Second.m)

- (void)call_summary:(id)sender 
{ 
    NSLog(@"in call summary click"); 
    First *first=[[First alloc] init]; 
    [first ChangeLabelName:@"My name is shivam"]; 
} 

它在去方法-(void)ChangeLabelName:(NSString *)title.但標籤文字不變。 我用[topheading_label setNeedsDisplay];.但是dint爲我工作。 幫助me.`

+0

沒有人在這裏幫助我..! :( – shivam

+0

嘿好友在這裏.. :) – Rajneesh071

回答

1

您可以使用通知中心。在First.m中註冊通知並從Second.m發佈通知。

+0

哦,是的......我忘了......讓我試試這個.. – shivam

1

仍未更新標籤的原因是因爲你的第二

- (void)call_summary:(id)sender 

沒有引用正確的控制器實例。

First *first=[[First alloc] init]; 

創建了新的First instance。

如果你想讓第二次談到第一,你可以使用委託。

在Second.h,這樣定義

@protocol SecondDelegate <NSObject> 
-(void)ChangeLabelName:(NSString *)title; 
@end 

一個protocal添加一個新的屬性:

@property (nonatomic, strong) id <SecondDelegate> delegate; 

在First.h,

@interface First : UIViewController <SecondDelegate> 

在First.m

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
Second *second = [storyboard instantiateViewControllerWithIdentifier:@"second"]; 
second.delegate = self; 
[self.view addSubview:second.view]; 

在Second.m callSummary:changeLabelName:

- (void)call_summary:(id)sender 
{ 
    NSLog(@"in call summary click");  
    [self.delegate ChangeLabelName:@"My name is shivam"]; 
} 

有關Protocal的更多信息,請參閱this

BTW,我會用小寫字母前綴的實例方法,比如建議你。

+0

仍然標籤文本不會改變.. :( – shivam

+0

您是否有一個示例項目?也許別的東西丟失。 – Kenny

+0

謝謝@kenny ..現在它解決了使用nsnotification ... – shivam

0

方法1

我建議你宣佈你First視圖控制器appDelegatesynthesize

AppDelegate.h

@property (nonatomic,strong) First *first; 

AppDelegate.m

first=[[First alloc] init]; 

現在,在你的第二個。米

- (void)call_summary:(id)sender 
{ 
    AppDelegate *appDelegate=(AppDelegate*)[[UIApplication sharedApplication] delegate]; 

    [appDelegate.first ChangeLabelName:@"My name is Rajneesh :D "]; 
} 

方法2

- (void)call_summary:(id)sender 
{ 
    NSUserDefaults *def =[NSUserDefaults standardUserDefaults]; 
    [def setObject:@"My name is Rajneesh :D " forKey:@"lablString"]; 
} 

Second'sviewWillAppear,設置文本。

-(void)viewWillAppear:(BOOL)animated 
{ 
    yourLabel.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"lablString"]; 
} 

方法3

使用,看看肯尼的回答

+0

不能正常工作...... :( – shivam

+0

雖然視圖處於運行狀態,你怎麼能從子視圖中改變它的對象值 – shivam

+0

你正在執行哪一個(方法)? – Rajneesh071