Iphone 在iOS中创建视图控制器和访问标签

Iphone 在iOS中创建视图控制器和访问标签,iphone,ios,ios5,Iphone,Ios,Ios5,我有几个具有相同状态栏的XIB。此状态栏由视图对象和其中的几个标签组成 本着DRY的精神,我想创建一个UIViewController,负责填充此状态栏,而不是在每个视图控制器中重复此操作 根据我对iOS开发人员的有限了解,我认为最好的方法是创建一个名为StatusBarViewController的子类,该子类继承自UIViewController,并在界面生成器中指示该视图属于StatusBarViewController类 在StatusBarViewController代码中,我将覆盖v

我有几个具有相同状态栏的XIB。此状态栏由视图对象和其中的几个标签组成

本着DRY的精神,我想创建一个UIViewController,负责填充此状态栏,而不是在每个视图控制器中重复此操作

根据我对iOS开发人员的有限了解,我认为最好的方法是创建一个名为StatusBarViewController的子类,该子类继承自UIViewController,并在界面生成器中指示该视图属于StatusBarViewController类

在StatusBarViewController代码中,我将覆盖viewDidLoad以填充标签

我的问题是,如何从视图控制器代码中获取所有标签的列表?从代码还是从IB创建标签更好?这基本上就是从一个xib复制/粘贴到所有其他xib

我是否从这种方法中遗漏了什么?有更好的办法吗


谢谢

您可以在您的案例中尝试:

使用状态栏创建一个Viewcontroller,并在其下方创建一个覆盖其余区域的空视图,以将其用作其他视图控制器(如视图a)的占位符视图 现在要显示任何Viewcontroller,请将该控制器添加到子视图中,如

 [A addSubView:anotherViewController.view];
并将其作为

 [anotherViewController.view removeFromSuperView];
在这种情况下,状态栏处理代码将位于第一个ViewController中的同一位置。
对您来说,最好的方法之一是创建一个空的xib文件->添加uiview并在其上应用所需的设计。 在此之后,添加uiview类,然后将该类应用于uiview。 现在您需要为标签创建IBoutles。 之后,在任何你想使用的控制器中,你都可以使用它

头盘

MainViewController.m

在MainViewController中,您可以在viewDidLoad方法中使用上述视图

HeaderPanel* headerView = [[[NSBundle mainBundle] loadNibNamed:@"HeaderPanel" owner:self options:nil] objectAtIndex:0];
headerView.headline.text=@"Welcome to my app";
[self addSubView(headerView)];

前面的两个答案都是正确的,但有些不完整。他们确实指引了我正确的方向。我最后做的是:

从我读到的内容来看,在我使用故事板的其余部分中,为这个视图创建一个单独的xib文件更容易

在my case PrefsBarView中创建扩展UIView的子类,并在interface builder中将该类分配给UIView

在父视图中,执行以下操作:

xibs名称为PrefsBar

PrefsBarView *prefsBarView = [[[NSBundle mainBundle] loadNibNamed:@"PrefsBar" owner:self options:nil] objectAtIndex:0];
[prefsBarView populatePrefsBar];
在本例中,populatePrefsBar是我创建的用于填充prefs状态的方法

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文档,您不应该访问父视图的导航控制器,或者我理解的是,因此,这在所有视图控制器中都会重复。

您希望获得放置在视图控制器中的所有标签。然后您可以使用for循环并更改标签的值。
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];