设计一个 XIB 并在不同的 UIViewController 中重用它
Posted
技术标签:
【中文标题】设计一个 XIB 并在不同的 UIViewController 中重用它【英文标题】:Design one XIB and re-use it in different UIViewControllers 【发布时间】:2014-03-10 21:14:07 【问题描述】:我有一个UIView
,我想在我的每个UIViewControllers
中使用它。主 UI 是用 Storyboard 设计的。额外的UIView
有自己的XIB。
所以我不想将额外的UIView
的 UI 手动放入每个UIViewController
,并连接每个UIViewController
上的插座。所以我想也许可以在一个 XIB 中创建 UI 和连接,然后以某种方式重用它。这可能吗?如果是怎么办?
【问题讨论】:
XIB 不是总是与某些特定的控制器类相关联吗? @KodeCharlie - 我相信他想将 XIB 与自定义UIView
对象相关联,而不是 UIViewController
【参考方案1】:
只需将此行添加到您的 ViewControllers 即可引用您的自定义视图:
YourView *yourView = (YourView *)[[NSBundle mainBundle] loadNibNamed:@"YourXIB"
owner:self
options:nil].firstObject;
但由于您希望在所有 ViewControllers 中都使用此自定义视图,我建议您拥有一个包含上述行的 UIViewController
子类,然后为您的项目中的每个其他子类创建 UIViewController
子类。这样您就可以在每个 ViewController 中引用您的自定义视图,但只需编写一次这一行。
【讨论】:
这似乎有帮助,但我遇到了另一个问题。我的 UIVIew 上的 IBActions 工作完美。但似乎 IBOutlets 没有初始化。当我检查我的 UIImageView 时,调试器说它是 NULL。为什么会这样? @user1990524 - 如果您在 XIB 中创建了UIImageView
,则应该初始化它。我会检查所有内容并确保所有插座都已连接等。尝试从 ViewController 修改您的自定义视图。如果您仍然无法弄清楚,请再问一个问题。【参考方案2】:
我认为在函数initWithNibName:
中保持相同的名称是可能的,因此您可以在其中一个控制器中执行此操作:
UIViewController *oneViewController = [[FirstViewControllerClass alloc] initWithNibName:@"MyXIBThatWillStayTheSame" bundle:nil];
[self presentModalViewController:oneViewController animated:YES];
然后在另一个中执行此操作:
UIViewController *anotherViewController = [[AnotherViewControllerClass alloc] initWithNibName:@"MyXIBThatWillStayTheSame" bundle:nil];
[self presentModalViewController:anotherViewController animated:YES];
【讨论】:
以上是关于设计一个 XIB 并在不同的 UIViewController 中重用它的主要内容,如果未能解决你的问题,请参考以下文章
NIB/XIB 中的 StackView 约束行为是不是不同?