使用CustomViewController作为顶部视图栏

时间:2017-03-04 16:33:26

标签: ios objective-c ibaction

我已经创建了一个名为TopHeaderViewController的xib文件的类,现在我使用另一个名为iShared的类作为共享实例方法。 在iShared中,当我第一次在iShared上调用sharedInstance时,我有一个名为topHeader的@property我调用:topHeader = [[TopHeaderViewController alloc] init];每次我浏览另一个viewController我把这个视图放在视图控制器的顶部。 视图显示正确但按钮不会触发事件。

viewController的代码:

- (void)viewDidLoad {
[super viewDidLoad];
ishared = [iShared sharedInstance];
// Do any additional setup after loading the view.
UIView *v = [ishared initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, headerView.frame.size.height)];

[headerView addSubview:v];

}

iShared代码:

- (id)init
{
self = [super init];

topHeaderVC = [[TopHeaderViewController alloc]init];

}
TopHeaderViewController的

代码:

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
mainMenuController =[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"mainMenuController"];
mainMenuController.superViewController = superViewController;
mainMenuController.view.frame = CGRectMake(0, self.view.frame.size.height, mainMenuController.view.frame.size.width, mainMenuController.view.frame.size.height);
[topView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"sfondo_nero_sfumato"]]];
[topView setFrame:CGRectMake(topView.frame.origin.x , topView.frame.origin.y, superViewController.view.frame.size.width, topView.frame.size.height)];
ishared = [iShared sharedInstance];
[self aggiornaTicketNotificationValue_betCoupon:ishared.betCoupon];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(receiveTestNotification:)
                                             name:NOTIFICATION_AGGIORNA_TOPHEADER_COUPON_LABEL
                                           object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(receiveTestNotification:)
                                             name:NOTIFICATION_AGGIORNA_TOPHEADER_ACCOUNT_DETAIL
                                           object:nil];
}
- (IBAction)mnClick:(id)sender {
iShared *ishared = [iShared sharedInstance];
if (![ishared menuAperto]){
    [UIView animateWithDuration:0.5
                          delay: 0
                        options:UIViewAnimationOptionCurveEaseIn
                     animations:^{
                         mainMenuController.view.alpha = 1.0;
                     }
                     completion:nil];
    [UIView commitAnimations];
    [superViewController.view addSubview:mainMenuController.view];
    ishared.menuAperto = true;
}else{
    [UIView animateWithDuration:0.5
                          delay: 0
                        options:UIViewAnimationOptionCurveEaseOut
                     animations:^{
                         mainMenuController.view.alpha = 0;
                     }
                     completion:nil];
    [UIView commitAnimations];
    [mainMenuController.view removeFromSuperview];

    ishared.menuAperto = false;
}

}

任何人都知道为什么我的按钮无法正常工作?

由于

1 个答案:

答案 0 :(得分:0)

问题在于你所做的事情完全是非法和不连贯的。您不能只将视图控制器的视图推送到您的界面中。视图控制器具有与其视图平行的结构层次结构,您完全无视这一点。结果是您最终得到的视图没有视图控制器。

那么应该你做什么?好吧,我们可以从两个方向来看待它。一个是您可能想知道如何将视图控制器的视图正确插入到您的界面中。答案是你必须让那个视图控制器成为你当前视图控制器的,并做一个小心的自定义容器控制器"跳舞,as I describe here

但是,我建议你想在这里做什么。事实上,在我看来,你的情况只是对视图控制器的不当使用。你根本不需要视图控制器。你只是使用有效的视图控制器去"垃圾箱潜水"检索设计 xib 文件的视图。但是你不需要视图控制器来做到这一点!您可以使用 xib 文件执行您想要执行的所有操作,并查看具有所需功能的子类。