1

我有几个 xib,其中有相同的状态栏。此状态栏由一个 View 对象和其中的几个 Labels 组成。

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

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

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

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

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

谢谢!

4

3 回答 3

0

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

  1. 根据我的阅读,为这个视图创建一个单独的 xib 文件更容易(其余的我使用故事板)。

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

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

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

于 2013-05-13T20:04:28.197 回答
0

您可以在您的情况下尝试的是:

  • 创建一个带有状态栏的 Viewcontroller 和一个覆盖其余区域的空视图,以将其用作其他视图控制器的占位符视图(例如视图 A)
  • 现在要显示任何 Viewcontroller,您将 A 上的控制器添加为 subView

     [A addSubView:anotherViewController.view];
    

    并将其删除为

     [anotherViewController.view removeFromSuperView];
    
  • 在这种情况下,您的状态栏处理代码将在您的第一个 ViewController 中的相同位置。
于 2013-05-13T04:20:54.767 回答
0

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

页眉面板.h

@interface HeaderPanel : UIView {

    IBOutlet UILabel *headline;

}

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

@end

主视图控制器.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)];
于 2013-05-13T04:28:26.660 回答