Objective c 设计一个XIB并在不同的UIViewController中重复使用

Objective c 设计一个XIB并在不同的UIViewController中重复使用,objective-c,storyboard,xib,reusability,Objective C,Storyboard,Xib,Reusability,我有一个UIView,我想在我的每个UIView控制器中使用它。主用户界面是用故事板设计的。额外的UIView有自己的XIB 因此,我不想手动将额外的UIView的UI放入每个UIViewController,并连接每个UIViewController上的插座。所以我想也许可以在一个XIB中创建UI和连接,然后以某种方式重用它。这可能吗?如果是,如何操作?只需将这一行添加到您的ViewController中,以引用您的自定义视图: YourView *yourView = (YourView *

我有一个
UIView
,我想在我的每个
UIView控制器中使用它。主用户界面是用故事板设计的。额外的
UIView
有自己的XIB


因此,我不想手动将额外的
UIView
的UI放入每个
UIViewController
,并连接每个
UIViewController
上的插座。所以我想也许可以在一个XIB中创建UI和连接,然后以某种方式重用它。这可能吗?如果是,如何操作?

只需将这一行添加到您的ViewController中,以引用您的自定义视图:

YourView *yourView = (YourView *)[[NSBundle mainBundle] loadNibNamed:@"YourXIB"
                                                               owner:self
                                                             options:nil].firstObject;

但是,由于您希望在所有ViewController中都使用此自定义视图,因此我建议为项目中的每个附加视图创建一个包含上述行的
UIViewController
子类,然后创建一个
UIViewController
子类。这样,您将在每个ViewController中都有一个对自定义视图的引用,但只需写一次这一行。

我认为在函数
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];

这似乎有帮助,但我有另一个问题。我的UIVIew上的IBActions工作得很好。但是看起来iboutlet没有初始化。当我检查UIImageView时,调试器会说它为NULL。为什么会这样?@user1990524-如果您在XIB中创建了
UIImageView
,则应该初始化它。我会检查一切,确保所有插座都已连接等。尝试从ViewController修改自定义视图。如果您仍然无法理解,请问另一个问题。XIB不总是与某个特定的控制器类关联吗?@KodeCharlie-我相信他想将XIB与自定义
UIView
对象关联,而不是
UIViewController