2015-02-27 3 views
0

У меня есть два контроллера вида. Я хочу сделать что-то подобное, когда я нажимаю кнопку «Назад» в SecondViewController, он возвращается к «FirstViewController», а также обновляет текст метки «FirstViewController». Я пробовал под кодом, его работая отлично, что когда я нажимаю кнопку «Назад», он возвращается к «FirstViewController», но проблема в том, что он не обновляет текст метки «FirstViewController». Когда я отлаживаю свой код, элемент управления переходит к методу «startSampleProcess» и обновляет текст метки, но когда мы возвращаемся к «FirstViewController» методом «processCompleted», там отображается старый текст. (Я делаю эту работу с использованием делегатов) Любая помощь будет оценена по достоинству.Как обновить текст заметки ViewController от SecondViewController

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

см. Это - http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers?answertab=votes#tab-top –

+0

Я знаю только делегатов, поэтому поэтому я использовал его, но если любой другой более простой способ, который может выполнить мою задачу, чем направить меня, как я могу выполнить мою задачу ниже. Я только хочу, чтобы, когда я нажимаю кнопку в «SecondViewController», он просто возвращается к «FirstViewController», а также обновляет текст метки, который находится в «FirstViewController». Если есть какой-либо другой простой способ, чем направить меня, как я могу это сделать. –

ответ

0

Похоже, главная проблема заключается в методе CallBack:. Он создает новый экземпляр FirstViewController, а не ссылается на существующий контроллер представления.

Но даже тогда это кажется неправильным способом сделать это, как упоминал Эрл в комментариях.

Как правило, вам не нужен один контроллер вида для ссылки на другой. Это приведет к жесткой связи (плохой). Простым способом было бы использовать NSNotificationCenter, но здесь есть много вариантов.

0

Существует множество способов обновления состояния контроллера вида, когда другой контроллер просмотра что-то делает. См. Мой ответ по аналогичному вопросу на этой неделе: What is the best way to keep the state of a modal UIViewController?

Смежные вопросы