2012-01-10 45 views
1

我試圖創建一個類似的「區域選擇器」,在「路徑」應用程序。 想法是在導航欄中有一個按鈕,它將觸發控制器滑動以顯示數據「選擇器」。移動一個UINavigationBar關閉屏幕,但下面的區域不可觸摸

鑑於以下UI結構:

UI View structure

主控制器是一個UINavigationController因爲我需要在以後添加的信息進一步水平。

基本上它的工作原理是這樣的:

應用與前景中的數據表開始。用戶可以點擊數據或點擊左上角的導航項。

Data table visible

一旦點擊了導航項目,它會移動的導航欄,工具欄和的tableView一邊露出選擇表視圖:

Selector table visible

這是一切行動遠代碼:

- (IBAction)toggleAreaSelector:(id) sender { 
    float offsetX = self.tableView.frame.origin.x == 0 ? 300 : -300; 

    [UIView animateWithDuration:0.3f delay:0 options:UIViewAnimationCurveEaseIn animations:^{ 
     self.navigationController.navigationBar.frame = CGRectOffset(self.navigationController.navigationBar.frame, offsetX, 0); 
     self.toolBar.frame = CGRectOffset(self.toolBar.frame, offsetX, 0); 
     self.tableView.frame = CGRectOffset(self.tableView.frame, offsetX, 0); 
    } completion:^(BOOL finished) { 
     self.navigationController.navigationBar.userInteractionEnabled = offsetX == 300 ? NO : YES; 
     self.tableView.userInteractionEnabled = offsetX == 300 ? NO : YES; 
    }]; 
} 

問題是:我無法單擊選擇器中的第一個項目「區域0」。我認爲這是因爲UINavigationBar仍然保持對該區域的「觸摸」鎖定並接收所有觸摸。

也許這也是因爲,當在界面生成器中可見時,我還可以看到我的選擇器視圖爲,其背後是,UINavigationBar。畢竟,這可能是錯誤的做法?

感謝您的任何想法。

+1

我不確定答案,但[此GitHub存儲庫](https://github.com/newmarcel/MKDSlideViewController)是其他人實現相同的導航想法。 – jonkroll 2012-01-10 06:46:20

+0

良好的鏈接,謝謝!其實這一點突出了關鍵問題imho:它應該是單獨的視圖控制器的左側,中間和(如果需要)權利。這樣每個控制器都有自己的視圖,而我遇到的問題就是不可能發生。謝謝你的啓發。 :) – 2012-01-10 07:02:10

回答

0

現在很高興找到解決方案。

@jonkroll的鏈接是最有幫助的,因爲另一個人已經成功地嘗試實現此UI模式。

的關鍵問題是如何使用

[self addChildViewController:self.leftViewController]; 
[self.view addSubview:self.leftViewController.view]; 

這樣,每個視圖控制器獨立,最重要的管理:同其觀點。

完成此操作後,管理控制器可以對這些視圖執行幾乎所有操作。

0

你爲什麼將它移出屏幕?爲什麼不只是推出新的視圖控制器與你的區域新的桌面視圖?

Areas *secondViewController = [[Areas alloc] initWithNibName:@"Areas" bundle:nil]; 
[self.navigationController pushViewController:secondViewController animated:YES]; 
[secondViewController release]; 
+0

你可以檢查鏈接'jonkroll'發送的應用程序結構演示我記:https://github.com/newmarcel/MKDSlideViewController – 2012-01-10 07:05:08

相關問題