2013-05-13 71 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)]; 
相关问题