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