如何从SecondViewController更新LabelController的Label文本

时间:2015-02-27 19:05:52

标签: ios objective-c viewcontroller

我有两个视图控制器。当我按下" Back"我想做出类似的事情。在SecondViewController中的按钮,它返回到" FirstViewController"并且还更新" FirstViewController"的标签文本。 我尝试了下面的代码,它的工作正常,当我按下后退按钮它回到" FirstViewController"但问题是它没有更新" FirstViewController"的标签文本。 当我调试我的代码时,控制转到" startSampleProcess"方法并更新标签的文字,但是当我们回到" FirstViewController"通过" processCompleted"方法,旧文本显示在那里。 (我使用代表做这项工作) 任何帮助将不胜感激。

FirstViewController.h

#import <UIKit/UIKit.h>
//#import "SampleProtocol.h"
@protocol SampleProtocolDelegate <NSObject>
@required
- (void) processCompleted;
@end
// Protocol Definition ends here
@interface FirstViewController : UIViewController{

    id <SampleProtocolDelegate> _delegate;
    IBOutlet UILabel *myLabel;
}

@property (nonatomic,strong) id delegate;

-(void)startSampleProcess; // Instance method

@end

FirstViewController.m

#import "FirstViewController.h"

@implementation FirstViewController
@synthesize delegate;

-(void)startSampleProcess{
    myLabel.text = @"we are back!!!";
    [NSTimer scheduledTimerWithTimeInterval:3.0 target:self.delegate
                                   selector:@selector(processCompleted) userInfo:nil repeats:NO];
}

- (void)viewDidLoad{
    [super viewDidLoad];
}

@end

SecondViewController.h

#import <UIKit/UIKit.h>
#import "FirstViewController.h"
@interface SecondViewController : UIViewController<SampleProtocolDelegate>{
    FirstViewController *sampleProtocol;
}
-(IBAction)CallBack:(id)sender;
@end

SecondViewController.m

#import "SecondViewController.h"

@implementation SecondViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad{
    [super viewDidLoad]; 
}

-(IBAction)CallBack:(id)sender{

    sampleProtocol = [[FirstViewController alloc]init];
    sampleProtocol.delegate = self;
    [sampleProtocol startSampleProcess];
}

#pragma mark - Sample protocol delegate

-(void)processCompleted{
    [self.navigationController popViewControllerAnimated:TRUE];
}

@end

2 个答案:

答案 0 :(得分:0)

看起来主要问题出在CallBack:方法中。它正在创建FirstViewController的新实例,而不是引用现有的视图控制器。

但即便如此,正如伯爵在评论中提到的那样,这感觉就像做错了。

通常,您不需要一个视图控制器来引用另一个视图控制器。这将导致紧密耦合(坏)。一种简单的方法是使用NSNotificationCenter,但这里有很多选项。

答案 1 :(得分:0)

当不同的视图控制器执行某些操作时,有许多方法可以更新视图控制器的状态。本周查看我对类似问题的回答:What is the best way to keep the state of a modal UIViewController?