У меня есть контроллер 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. Любая помощь будет высоко оценена.
b.delegate = self должен быть установлен, иначе я сомневаюсь, что он сработает. –
где. ?? Я не могу установить b.delegate, если я создаю объект для UINAV для представления. Просто прочитайте мою последнюю строку. –
Вы должны установить в контроллер, где вы вызываете контроллер B. –