在UIViewController中加载nib文件

Isu*_*uru 6 xib uiviewcontroller nib ios

我正在试验如何将nib文件加载到UIViewController.

我创建了一个名为Email的独立nib文件.首先我注意到,当加载视图控制器时,该initWithNibName方法不会被调用.所以我viewDidLoad像这样手动调用方法,

[self initWithNibName:@"Email" bundle:[NSBundle mainBundle]];
Run Code Online (Sandbox Code Playgroud)

那没起效.我还得到一个警告说表达结果未使用.

我在互联网上搜索并发现了这篇文章并实现了loadView如下所述的方法,

- (void)loadView
{
    [super loadView];

    UINib *nib = [UINib nibWithNibName:@"Email" bundle:nil];
    [nib instantiateWithOwner:self options:nil];
}
Run Code Online (Sandbox Code Playgroud)

该方法被调用,但视图控制器仍为空!

任何人都可以告诉我我在这里看到了什么以及如何做到这一点?

谢谢.

更新:

首先,感谢所有的回复.然而voromaxsvena的答案表明我应该自动删除segues和加载笔尖,我不是很喜欢.Anil的答案有效,现在我有最后一个跳跃的障碍.

我有多个nib文件.根据用户的选择,它应该加载特定的笔尖.所以我尝试的是,把所有的笔尖都放在数组里面,

- (void)loadView
{
    [super loadView];

    NSArray *nibs = [[NSArray alloc] initWithObjects:
                     [[NSBundle mainBundle] loadNibNamed:@"Facsimile" owner:self options:nil],
                     [[NSBundle mainBundle] loadNibNamed:@"Email" owner:self options:nil],
                     [[NSBundle mainBundle] loadNibNamed:@"Memorandum" owner:self options:nil],
                     [[NSBundle mainBundle] loadNibNamed:@"ProjectMemo" owner:self options:nil], nil];


    self.view = [nibs objectAtIndex:0];
}
Run Code Online (Sandbox Code Playgroud)

并使用它的索引访问它self.view = [nibs objectAtIndex:1];.但它会抛出错误*由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [__ NSArrayM _setViewDelegate:]:无法识别的选择器发送到实例0xd56fd20'*

为什么会出现这个错误?如果不可能,我愿意接受建议.

再次感谢.抱歉有点拖延这一点.

Ani*_*ese 9

使用以下代码从nib加载视图并用作视图控制器的视图

- (void)loadView
{ 
[super loadView];

NSArray *nib =[[NSBundle mainBundle]loadNibNamed:@"test" owner:self options:nil];
self.view = [nib objectAtIndex:0];
}  
Run Code Online (Sandbox Code Playgroud)

编辑

根据用户选择加载单个笔尖.请参阅加载单个笔尖

    NSArray *nib =[[NSBundle mainBundle]loadNibNamed:@"test" owner:self options:nil];  
Run Code Online (Sandbox Code Playgroud)

将返回一个对象数组.从您更新的问题我可以看到您将这些数组存储到另一个数组中.现在你的nib数组是一个'array'对象的数组.

 self.view = [[nibs objectAtIndex:0]objectAtIndex:0]; 
Run Code Online (Sandbox Code Playgroud)

将工作.

但它并不好,根据用户选择加载一个笔尖


sve*_*ena 1

您不应该从视图控制器的方法中加载视图控制器的笔尖。

如果您想从 nib 实例化视图控制器,您可以从该视图控制器的外部(通常是呈现它的视图控制器)执行此操作。

如果您正在呈现的视图控制器中寻找已经设置了插座连接的挂钩,则覆盖-awakeFromNib是一个流行的选择。-viewDidLoad是另一个。

更新#1

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
   if ( /*do your segue identification stuff*/ ) {
      UIViewController *myViewController = /*init your view controller here*/
      UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:myViewController];
      [self presentViewController:navigationController animated:YES completion:nil];
      return NO;
   }
   return YES;
}
Run Code Online (Sandbox Code Playgroud)