2013-05-13 45 views
1

我有幾個xib,其中具有相同的狀態欄。該狀態欄由一個View對象和幾個標籤組成。在iOS中創建視圖控制器並訪問標籤

本着DRY的精神,我想創建一個UIViewController來負責填充這個狀態欄,而不是在每個視圖控制器中重複這個。

從我有限的iOS開發知識中,我會說最好的路徑是創建一個繼承自UIViewController的子類(也許稱爲StatusBarViewController),並且在Interface Builder中指示此視圖是StatusBarViewController類。

在StatusBarViewController代碼中,我會覆蓋viewDidLoad來填充標籤。

我的問題是,如何從視圖控制器代碼中獲得所有標籤的列表?從代碼或IB創建標籤會更好嗎? (這基本上只是從一個xib複製/粘貼到所有其他的)。

我是否缺少這種方法?有沒有更好的辦法?

謝謝!

+0

你想獲得放置在視圖控制器中的所有標籤。然後你可以使用for循環和chnage標籤的值。 – Balu 2013-05-13 04:12:43

回答

0

上述兩個答案都是正確的,但有些不完整。他們的確引導我朝着正確的方向前進。我所做的最後是:

  1. 從我讀,它更容易創建一個單獨的廈門國際銀行文件,這個視圖(其餘的我用故事板)。

  2. 創建一個擴展UIView的子類(在我的情況下PrefsBarView),並在界面生成器中將這個類分配給UIView。

  3. 在父視圖,執行以下操作:

(該xibs名稱是PrefsBar)

PrefsBarView *prefsBarView = [[[NSBundle mainBundle] loadNibNamed:@"PrefsBar" owner:self options:nil] objectAtIndex:0]; 
[prefsBarView populatePrefsBar]; 

在這種情況下,populatePrefsBar是我創建填充首選項的方法狀態。

prefsBarView.frame = CGRectMake(
    self.navigationController.view.frame.size.width - prefsBarView.frame.size.width, 
    self.navigationController.view.frame.size.height - prefsBarView.frame.size.height - self.navigationController.navigationBar.frame.size.height - [UIApplication sharedApplication].statusBarFrame.size.height, 
    prefsBarView.frame.size.width, prefsBarView.frame.size.height); 
[_myMainView addSubview:prefsBarView]; 

上述步驟用於確保視圖位於可見區域的底部。你必須考慮狀態欄的大小(在屏幕的最上方)和導航欄的大小(如果你使用的話)。你也不應該硬編碼一個值...它可能不會在視網膜顯示。

理想的情況是所有的調整會發生在PrefsBarView內部,但根據Apple文檔,您不應該訪問父視圖的導航控制器(或者我理解),所以這在所有視圖控制器中都會重複。

0

什麼,你可以在你的情況下,嘗試是:

  • 與狀態欄,並在其下方空視圖覆蓋區域的其餘部分使用它作爲其他視圖控制器的佔位符視圖中創建一個視圖控制器(比如查看A )
  • 現在表現出任何的ViewController您在添加控制器子視圖像

    [A addSubView:anotherViewController.view]; 
    

    並將其拆下

    [anotherViewController.view removeFromSuperView]; 
    
  • 在這種情況下,您的狀態欄處理代碼將位於您的第一個ViewController中。
0

對你來說最好的方法之一是創建一個空的xib文件 - >添加一個uiview並在其上應用所需的設計。 之後,添加一個uiview類,然後將該類應用到uiview。 現在您需要爲標籤創建一個IBoutles。 之後,在任何控制器要使用u可以使用它

HeaderPanel.h

@interface HeaderPanel : UIView { 

    IBOutlet UILabel *headline; 

} 

@property (nonatomic, retain) IBOutlet UILabel *headline; 

@end 

MainViewController.m

在MainViewController您可以使用viewDidLoad中上述觀點( ) 方法。

HeaderPanel* headerView = [[[NSBundle mainBundle] loadNibNamed:@"HeaderPanel" owner:self options:nil] objectAtIndex:0]; 
[email protected]"Welcome to my app"; 
[self addSubView(headerView)]; 
相關問題