0

У меня есть контроллер A, и есть UIButton, который при щелчке я представляю новый контроллер B. Но проблема в том, что контроллер B сначала встроен в NAV. Поэтому в конечном итоге я представляю UINavigationController.Делегат не вызван после отклонения контроллера

Теперь есть UIButton в контроллер B, на котором контроллер будет сбрасывать со счетов и делегат должен быть передан на контроллер А с некоторым сообщением

контроллера UIButtonCode

- (IBAction)summaryButtonClick:(id)sender { 

UIStoryboard* storyBoard=[UIStoryboard storyboardWithName:@"Main" bundle:nil]; 

UINavigationController* summaryVC=[storyBoard instantiateViewControllerWithIdentifier:@"SummaryNavVC"]; 

[self presentViewController:summaryVC animated:YES completion:nil]; 
summaryVC=nil; 

} 

Теперь контроллер B .h файл

#import <UIKit/UIKit.h> 
@protocol SummaryViewWhatsNewDelegate <NSObject> 
@required 
- (void) SummaryViewWhatsNew:(NSString*)title; 
@end 
@interface SummaryViewController :   
UIViewController<UITableViewDataSource,UITableViewDelegate> 
{ 
id <SummaryViewWhatsNewDelegate> _delegate; 
} 
@property (nonatomic,strong) id delegate; 

@property (weak, nonatomic) IBOutlet UITableView *summaryTableView; 
- (IBAction)closeSummaryView:(id)sender; 

@end 

.m

//Button Click 
[self dismissViewControllerAnimated:YES completion:^{ 
[_delegate SummaryViewWhatsNew:@"Sales Triggers Filter"]; 
}]; 

Я уже сделал реализацию делегата в моем контроллере .h

@interface ControllerA : UIViewController<SummaryViewWhatsNewDelegate> 

.m Контроллер А

#pragma mark -ControllerB Delegate 
-(void)SummaryViewWhatsNew:(NSString *)title{ 
    NSLog(@"Delegate Called"); 
} 

В этом случае я знаю, что я не при условии, что delegate.self часть как я представляю контроллер NAV, а не контроллер B

Итак, я создал объект в vi ewDidLoad и Controller * B и назначить делегат самостоятельно. Но это не работает, и делегат никогда не называется

С другой стороны, если я представляю только Cntroller B без навигации, и перед представлением я сохраняю b.delegate = self, он работает.

Другая альтернатива может быть увольнением Уведомления. Но я хочу работать с делегатами.

Итак, есть ли способ вызвать делегата представленного контроллера представления, который находится , встроенный Nav. Любая помощь будет высоко оценена.

+0

b.delegate = self должен быть установлен, иначе я сомневаюсь, что он сработает. –

+0

где. ?? Я не могу установить b.delegate, если я создаю объект для UINAV для представления. Просто прочитайте мою последнюю строку. –

+0

Вы должны установить в контроллер, где вы вызываете контроллер B. –

ответ

0

Ну, я получил ответ Мы должны извлечь объект контроллера из СЧА

Где Предъявление мне просто нужно добавить эти строки и она работала

UIStoryboard* storyBoard=[UIStoryboard storyboardWithName:@"Main" bundle:nil]; 

UINavigationController* summaryVC=[storyBoard instantiateViewControllerWithIdentifier:@"SummaryNavVC"]; 

//Add These lines in order to get the object of Controller B. 
// SummaryViewController is my Controller B 

SummaryViewController* summary=[[summaryVC viewControllers] objectAtIndex:0]; 
summary.delegate=self; 
[self presentViewController:summaryVC animated:YES completion:nil]; 

И это сработало.