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];.But dint 为我工作。帮帮我。`

4

3 回答 3

1

您可以使用通知中心。在 First.m 中注册通知并从 Second.m 中发布通知。

于 2013-05-17T07:00:25.240 回答
1

您的标签未更新的原因是因为您是第二个

- (void)call_summary:(id)sender

没有引用正确的控制器实例。

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

创建了一个新的第一个实例。

如果你想让 Second 和 First 对话,你可以使用 delegate。

在 Second.h 中,定义一个类似的协议

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

添加新属性:

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

在 First.h 中,

@interface First : UIViewController <SecondDelegate>

在第一.m

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

在 Second.m callSummary 中:

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

有关 Protocal 的更多信息,请参阅

顺便说一句,我建议您在 Instance 方法中使用小写字母作为前缀,例如:changeLabelName。

于 2013-05-17T05:41:41.560 回答
0

方法一

我建议你在and中声明你的First视图控制器。appDelegatesynthesize

AppDelegate.h

@property (nonatomic,strong) First *first;

AppDelegate.m

first=[[First alloc] init];

现在在你的 Second.m

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

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

方法二

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

在 中Second's viewWillAppear,设置您的文本。

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

方法3

使用protocol,看看肯尼的回答

于 2013-05-17T06:14:19.557 回答