Iphone Objective-c-将对象从XIB文件获取到视图控制器

Iphone Objective-c-将对象从XIB文件获取到视图控制器,iphone,objective-c,xib,viewcontroller,Iphone,Objective C,Xib,Viewcontroller,因此,我有一个XIB文件,其中包含一个视图。在该视图中,我希望添加自定义对象,然后能够获取这些对象,并在视图控制器中使用它们,在该视图控制器中,我以编程方式包装其他东西 我的XIB文件名为“myxibbrary.XIB” 我希望将对象添加到的视图控制器称为“ContactDetailsViewController” 正在从UITableViewController推送我的视图控制器,如下所示: ContactDetailsViewController *detailViewController

因此,我有一个
XIB
文件,其中包含一个视图。在该视图中,我希望添加自定义对象,然后能够获取这些对象,并在视图控制器中使用它们,在该视图控制器中,我以编程方式包装其他东西

我的XIB文件名为
“myxibbrary.XIB”
我希望将对象添加到的视图控制器称为“ContactDetailsViewController”

正在从
UITableViewController
推送我的视图控制器,如下所示:

 ContactDetailsViewController *detailViewController = [[ContactDetailsViewController alloc] init];
在我的
联系人详细信息查看控制器视图中将出现
我有以下代码来获取XIB对象:

 UIView *xibView = [[[NSBundle mainBundle] loadNibNamed:@"MyLib" owner:self options:nil] objectAtIndex:0];
    [self.view addSubview:xibView];
例如,
loadNibNamed
属性应该是?XIB文件的名称?该XIB文件中的视图的名称?还是什么

所有这些都给我带来了错误和应用程序trows exeption

我不知道如何使用XIB文件,因为我对
Objective-c
编码非常陌生

任何帮助都将不胜感激!!!
谢谢

如果您查看,有一个名为
initWithNibName:bundle:
的方法。它列出了苹果为演示如何使用xib文件和视图控制器而提供的五个不同的示例代码项目。您应该阅读其中一些内容以获得基本理解。

如果您想从NIB加载
UIView
,此代码将更正确(因为您不知道xib文件中所需对象的索引)

-(id)loadViewFromNIB:(NSString*)nibName所有者:(id)所有者类:(class)\u类
{
NSArray*objects=[[NSBundle mainBundle]loadNibNamed:nibName所有者:所有者选项:nil];
for(对象中的id对象){
if([对象是类的种类:\u类]){
返回对象;
}
}
}

在interface builder中打开MyLib.xib,检查该文件中是否有UIView组件


您从异常中得到了什么错误消息?

被称为NIB的XIB(作为历史事项)定义了至少一个要由视图控制器“控制”的视图。此视图可以表示整个用户界面,也可以仅表示另一个视图的子视图(例如,您的XIB可以表示可重用的表行)。因此,您不应该以您描述的方式使用XIB作为预构建接口元素的容器

但是,只要控制器知道XIB的组件,就可以轻松地使用这些组件。也就是说,XIB的元素应该连接到视图控制器类的属性

例如,假设您具有以下视图控制器界面:

#import <UIKit/UIKit.h>

interface MyViewController : UIViewController { 
}

@property (strong, nonatomic) IBOutlet UITextView *textEntry;
@property (strong, nonatomic) IBOutlet UIButton *enterButton;

调用此方法时,将创建
MyViewController
的实例,该实例将自动从NIB加载存储的对象,并将它们绑定到视图控制器对象的属性。然后,它将检索按钮标签的文本并将其写入日志控制台。

Wow感谢您的精彩解释并花时间这么做=)
- (void)aMethodOfSomeOtherController
{
  MyViewController *myView = [[MyViewController alloc] 
                              initWithNibName:@"MyViewController" 
                              bundle:nibBundleOrNil];

  NSString *buttonLabelText = [[[myView] enterButton] titleLabel] text];
  NSLog(@"Button label text = %@", buttonLabelText);

  [myView release];
}