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

时间:2013-05-13 04:09:13

标签: iphone ios ios5

我有几个xib,其中我有一个相同的状态栏。此状态栏由View对象组成,其中包含多个标签。

本着DRY的精神,我想创建一个UIViewController来处理填充这个状态栏,而不是在每个视图控制器中重复这个。

从我有限的iOS开发知识,我会说最好的方法是创建一个继承自UIViewController的子类(可能称为StatusBarViewController),并在Interface Builder中指示此视图属于StatusBarViewController类。

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

我的问题是,如何从视图控制器代码中获取所有标签的列表?从代码或IB创建标签会更好吗? (这基本上只是从一个xib复制/粘贴到所有其余部分)。

我错过了这种方法吗?还有更好的方法吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

您可以尝试的是:

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

     [A addSubView:anotherViewController.view];
    

    并将其删除为

     [anotherViewController.view removeFromSuperView];
    
  • 在这种情况下,您的状态栏处理代码将位于您的第一个ViewController中。

答案 1 :(得分:0)

最好的方法之一是创建一个空的xib文件 - >添加一个uiview并在其上应用所需的设计。 之后添加一个uiview类,然后将该类应用于uiview。 现在您需要为标签创建一个IBoutles。 在你想要使用的任何控制器之后,你可以使用它

<强> 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];
headerView.headline.text=@"Welcome to my app";
[self addSubView(headerView)];

答案 2 :(得分:0)

以前的答案都是正确的,但有点不完整。他们的确引导我朝着正确的方向前进。我最后做的是:

  1. 从我读到的内容来看,为这个视图创建一个单独的xib文件更容易(其余的我正在使用故事板)。

  2. 创建一个扩展UIView的子类(在我的案例中为PrefsBarView),并在界面构建器中将此类分配给UIView。

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

  4. (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文档,您不应该访问父视图的导航控制器(或者我理解),所以在所有视图控制器中都会重复此操作。 / p>