Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用CustomViewController作为视图的顶部栏_Ios_Objective C_Ibaction - Fatal编程技术网

Ios 使用CustomViewController作为视图的顶部栏

Ios 使用CustomViewController作为视图的顶部栏,ios,objective-c,ibaction,Ios,Objective C,Ibaction,我用xib文件创建了一个名为topHeadServiceWController的类,现在我使用另一个名为iShared的类作为共享实例方法。 在iShared中,我现在有一个名为topHeader的@property,当我第一次在iShared上调用sharedInstance时,我调用:topHeader=[[topHeadServiceWController alloc]init];每次我在另一个视图控制器中导航时,我都会将此视图放在视图控制器的顶部。 视图显示正确,但按钮未触发事件 vie

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

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];

}
- (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;
}

}
iShared的代码:

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

topHeaderVC = [[TopHeaderViewController alloc]init];

}
TopHeadService控制器的代码:

- (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];

}
- (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;
}

}
有人知道我为什么要费这么大的劲才能把纽扣扣扣好吗


谢谢

问题是你所做的完全是非法和不连贯的。不能只是将视图控制器的视图推入界面。视图控制器有一个与其视图平行的结构层次,您完全忽略了这一点。结果是最终得到的视图没有视图控制器

那你该怎么办?嗯,我们可以从两个方向看。一个是,您可能想知道如何将视图控制器的视图正确插入到接口中。答案是,您必须使该视图控制器成为当前视图控制器的子视图控制器,并仔细执行“自定义容器控制器”舞蹈


然而,我想说的是,这不是你想在这里做的。事实上,在我看来,您的情况只是不恰当地使用了视图控制器。这里根本不需要视图控制器。实际上,您只是使用视图控制器去“转储程序潜水”,以检索由xib文件设计的视图。但您不需要视图控制器来完成此操作!您只需使用一个xib文件和包含所需功能的视图子类,就可以在这里完成所有您想做的事情。

谢谢您的帮助。我用菜单按钮栏定制了一个UIVIew。但现在我在尝试从中显示其他控制器时遇到了“不在视图层次结构错误”menu@MirkoFogazzi如果你有新问题,问一个新问题!