2017-03-04 30 views
0

我已經用xib文件創建了一個名爲TopHeaderViewController的類,現在我使用另一個名爲iShared的類作爲共享實例方法。 在iShared中,我有一個叫做topHeader的@property,現在當我第一次調用iShared上的sharedInstance時,我打電話:topHeader = [[TopHeaderViewController alloc] init];每當我瀏覽另一個viewController時,我把這個視圖放在視圖控制器的頂部。 視圖正確顯示,但該按鈕不觸發事件。使用CustomViewController作爲頂部視圖欄

代碼的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:爲TopHeaderViewController

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

topHeaderVC = [[TopHeaderViewController alloc]init]; 

} 

代碼:

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

} 

有誰知道爲什麼我得到這個麻煩讓我的按鈕工作?

感謝

回答

0

的問題是,你在做什麼是完全非法的,不連貫的。你不能將視圖控制器的視圖推入你的界面。視圖控制器具有與其視圖相似的結構層次結構,而您完全無視這一點。結果是,您最終會看到沒有視圖控制器的視圖。

那麼你應該做什麼?那麼,我們可以從兩個方向來看它。一個是你可能想知道如何將視圖控制器的視圖正確地插入到你的界面中。答案是你必須讓你的當前視圖控制器的視圖控制器,並做一個小心的「自定義容器控制器」舞蹈,as I describe here

但是,我會建議那是而不是你想在這裏做什麼。事實是,在我看來,你的情況只是視圖控制器的不適當使用。這裏根本不需要視圖控制器。您只是使用視圖控制器來實現「垃圾箱潛水」以檢索設計了xib文件的視圖。但你不需要視圖控制器來做到這一點!你可以做所有你想做的事情,只需使用一個xib文件並查看實現所需功能的子類。

+0

感謝您的幫助。我用菜單按鈕欄製作了一個自定義的UIVIew。 但是現在當我嘗試從菜單 –

+0

@MirkoFogazzi展示其他控制器時,我得到了「不在視圖中的層次結構錯誤」@MirkoFogazzi如果您有新問題,請提出一個新問題! – matt