我有几个xib,其中我有一个相同的状态栏。此状态栏由View对象组成,其中包含多个标签。
本着DRY的精神,我想创建一个UIViewController来处理填充这个状态栏,而不是在每个视图控制器中重复这个。
从我有限的iOS开发知识,我会说最好的方法是创建一个继承自UIViewController的子类(可能称为StatusBarViewController),并在Interface Builder中指示此视图属于StatusBarViewController类。
在StatusBarViewController代码中,我将覆盖viewDidLoad以填充标签。
我的问题是,如何从视图控制器代码中获取所有标签的列表?从代码或IB创建标签会更好吗? (这基本上只是从一个xib复制/粘贴到所有其余部分)。
我错过了这种方法吗?还有更好的方法吗?
谢谢!
答案 0 :(得分:0)
您可以尝试的是:
现在要显示任何ViewController,您将该控制器添加到A作为子视图,如
[A addSubView:anotherViewController.view];
并将其删除为
[anotherViewController.view removeFromSuperView];
答案 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)
以前的答案都是正确的,但有点不完整。他们的确引导我朝着正确的方向前进。我最后做的是:
从我读到的内容来看,为这个视图创建一个单独的xib文件更容易(其余的我正在使用故事板)。
创建一个扩展UIView的子类(在我的案例中为PrefsBarView),并在界面构建器中将此类分配给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文档,您不应该访问父视图的导航控制器(或者我理解),所以在所有视图控制器中都会重复此操作。 / p>