簡體   English   中英

將視圖控制器用於子視圖

[英]Using a View Controller for a subView

背景:

我有一個應用程序有一個標簽欄作為其界面的一部分,但我沒有使用標簽欄控制器...我故意這樣做有很多原因所以請不要回答我重寫應用程序作為標簽欄控制器,因為那不會有幫助。

視圖控制器很好地控制了屏幕和標簽等,但現在我想為應用程序添加一個完全不同的視圖。 現在,是的,我可以將視圖放在現有的.XIB中,然后將其所有控件放在現有的視圖控制器類中,但它已經有很多工作,所以我想把這個視圖綁定到它自己的視圖控制器並按下按鈕即可有效啟動。

現在,在標簽欄控制器模型中,添加一個綁定到選項卡的新視圖控制器沒有問題,但由於我沒有使用標簽欄控制器,我有點迷失。 我知道這是基本的,我只是沒有看到它,但在XIB中沒有辦法將tabcontroller添加到tabbar或tabbar項目,sicne它不是tabbarcontroller IB似乎不允許這樣。 我可以輕松地將視圖添加到IB,但是我沒有將控制器綁定到它並且需要該視圖的所有控制代碼也是主控制器的一部分,我可以做但我更願意隔離,因為此視圖與其他用戶交互和視圖相關的所有其他功能完全不同。

那么,實現這一目標的最佳方法是什么? 在選項卡欄上按實例化ViewController,並將其視圖作為子視圖添加到主窗口? 我認為這會起作用,但這似乎有點kludgy ..有沒有其他方式來顯示視圖並將其綁定到一個視頻控制器?

如果您使用iOS 5的視圖控制器包含 ,則在viewDidLoad您將安裝第一個視圖控制器。 我通常在我的父控制器的NIB /故事板中定義一個childView視圖,它將指示放置子視圖的位置(如果你想為轉換設置動畫並希望將動畫限制在子視圖中,這是非常有用的):

OneViewController *controller = [[OneViewController  alloc] initWithNibName:@"OneViewController"  bundle:nil];

[self addChildViewController:controller];
[controller didMoveToParentViewController:self];
[childView addSubview:controller.view];

然后,當您單擊(例如)第二個選項卡時,您想要轉到下一個控制器,您只需調用transitionFromViewController

[self addChildViewController:newController];

[self transitionFromViewController:oldController 
                  toViewController:newController
                          duration:0.5
                           options:UIViewAnimationOptionTransitionCrossDissolve
                        animations:^{
                            // do any other animation of the parent view that you want coordinated with the transition, e.g., I'm going to replace the nav bar title
                            [self updateTitles:newController];
                        }
                        completion:^(BOOL finished){
                            [oldController willMoveToParentViewController:nil];
                            [oldController removeFromParentViewController];
                            [newController didMoveToParentViewController:self];
                        }];

顯然,完成所有這些工作后,您需要做很多工作才能重現標准的標簽欄控制器功能,但我認為您有充分的理由這樣做。

您在上一段中提出的建議大多數都適用。 :-) View Controllers實際上是為了管理“一屏內容”,所以如果你試試這個,請准備好卸載或重新加載視圖,自動旋轉和其他細微之處的怪癖。 在Apple的視圖控制器編程指南中遵循這個建議可能是明智之舉:

注意:如果要將視圖層次結構划分為多個子區域並分別管理每個子區域,請使用通用控制器對象(從NSObject降序的自定義對象)而不是視圖控制器對象來管理每個子區域。 然后使用單個視圖控制器對象來管理通用控制器對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM