Im строит приложение, которое вызывает различные подвидов и заложить их на в главном контроллере представления (http://imgur.com/p6l9Oac)Метод делегата не вызывается родительским представлением?
когда-либо пользователь нажимает на кнопку в нижней части экрана (назовет его раздвижным меню!) Вид за ней исчезнут, и появится новая.
Одним из подзонов является «Настройки», в котором у него есть некоторые переключатели для включения/выключения некоторых кнопок.
в НастройщикеПросмотр. Ive установить протокол:
@protocol SettingsViewControllerDelegate <NSObject>
@required
-(void)hideCountdownView;
-(void)showCountdownView;
@end
и интерфейс содержит:
@interface SettingsHubViewController : UIViewController
@property (weak, nonatomic) IBOutlet UISwitch *enableCountdown;
@property (nonatomic, assign) id <SettingsViewControllerDelegate> delegate;
@property (weak, nonatomic) IBOutlet UIView *mainView;
@end
и в осуществлении:
- (IBAction)switchAction:(id)sender {
if (!self.enableCountdown.on) {
NSLog(@"The view is Hidden");
[_delegate hideCountdownView];
} else if (self.enableCountdown.on) {
NSLog(@"The view is Shown");
[_delegate showCountdownView];
}
}
Вы можете увидеть, я использовал _delegate использовать шоу и скрыть функции , Я использовал NSLog, чтобы убедиться, что Im вызывает функции правильно.
в MainViewController
#import "SettingsHubViewController.h"
@interface MainViewController() <SettingsViewControllerDelegate>
@property (nonatomic, strong) SettingsHubViewController * settingsViewController;
и реализации
@implementation MainViewController
-(void)showCountdownView {
self.slidingMainMenuViewController.countdownView.hidden = NO;
NSLog(@"Showing Countdown");
}
-(void)hideCountdownView {
self.slidingMainMenuViewController.countdownView.hidden = YES;
NSLog(@"Hiding Countdown");
}
-(void)viewDidLoad {
[super viewDidLoad];
self.settingsViewController.delegate = self;
self.slidingMainMenuViewController.delegate = self;
}
проблема заключается в том, что NSLogs выше не вызывается вообще, может ли один помочь мне ?
Благодаря
UPDATE: Поскольку у меня есть более 20 различных мнений, что должно быть названо, я создал этот метод
- (UIView *) getPresentedMenu:(NSString *) menuIdentifer withMenuTag:(int) menuTag withAViewController:(UIViewController*) menuViewController andMenuDelegate:(id) menuDelegate {
menuViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:Nil] instantiateViewControllerWithIdentifier:menuIdentifer];
menuViewController.view.tag = menuTag;
if (self.viewBeingCalledBySwipe == NO) {
menuViewController.view.frame = CGRectMake(0, menuViewController.view.frame.size.height, menuViewController.view.frame.size.width, menuViewController.view.frame.size.height);
} else if (self.isItRightSwipe == YES) {
menuViewController.view.frame = CGRectMake(-menuViewController.view.frame.size.width, 0, menuViewController.view.frame.size.width, menuViewController.view.frame.size.height);
} else if (self.isItRightSwipe == NO) {
menuViewController.view.frame = CGRectMake(menuViewController.view.frame.size.width, 0, menuViewController.view.frame.size.width, menuViewController.view.frame.size.height);
}
[self.view addSubview:menuViewController.view];
[self addChildViewController:menuViewController];
[menuViewController didMoveToParentViewController:self];
UIView *view = menuViewController.view;
return view;
}
Так что, когда когда-либо я нужен определенный контроллер представления, я просто называю это функция
self.childView = [self getPresentedMenu:@"Settings" withMenuTag:SETTINGS_TAG withAViewController:self.settingsViewController andMenuDelegate:self.settingsViewController.delegate];
, но этот метод не назначая делегат
является 'switchAction', фактически получившим вызов? Поместите «NSLog» наверху или точку останова внутри него, чтобы увидеть, действительно ли он вызван. Я вижу, что это «IBAction». Вы, скорее всего, забыли подключить действие в построителе интерфейса. – Dima
Да switchAction вызывается, потому что я вижу «Контекст скрыт» и «Вид показан» на консоли – user3277090
Установите точку останова в 'switchAction' и убедитесь, что делегат не равен нулю. Я подозреваю, что он либо не установлен должным образом, либо освобождается до того, как он будет. – Dima