我有两个视图控制器。当我按下" 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
答案 0 :(得分:0)
看起来主要问题出在CallBack:
方法中。它正在创建FirstViewController
的新实例,而不是引用现有的视图控制器。
但即便如此,正如伯爵在评论中提到的那样,这感觉就像做错了。
通常,您不需要一个视图控制器来引用另一个视图控制器。这将导致紧密耦合(坏)。一种简单的方法是使用NSNotificationCenter
,但这里有很多选项。
答案 1 :(得分:0)
当不同的视图控制器执行某些操作时,有许多方法可以更新视图控制器的状态。本周查看我对类似问题的回答:What is the best way to keep the state of a modal UIViewController?