iOS通过多个UIViewController从Nib文件实例化自定义视图

问题描述:

我需要一个如何从nib文件实例化自定义视图的示例。我把头绕在几个计算器上,但是我没有明白。也许我只需要一个提示如何去做。iOS通过多个UIViewController从Nib文件实例化自定义视图

我想要做的是 - 使用界面构建器创建自定义视图。它应该是一个模板,以便我可以多次实例化它以将其添加到多个视图控制器。

到目前为止,我创建了一个名为MyIssueView.xib的自定义视图xib文件。其实只是主视图和一些标签。

我创建了一个UIView的子类,它被称为IssueView,它的出口是MyIssueView.xib中的标签。

现在我该如何与IB连接网点?我如何从任何ViewController实例化IssueView?

会很高兴的例子! 干杯。

UPDATE:

我现在有

IssueView.xib IssueView.h(UIView子类) IssueView.m

我IssueView.h:

#import <UIKit/UIKit.h> 

@interface IssueView : UIView 

@property (weak, nonatomic) IBOutlet UILabel *label1; 
@property (weak, nonatomic) IBOutlet UILabel *label2; 
@property (weak, nonatomic) IBOutlet UILabel *label3; 
@property (weak, nonatomic) IBOutlet UILabel *label4; 

@end 

我的IssueView.m:

#import "IssueView.h" 

@implementation IssueView 
@end 

我ViewController.m:

#import "AllIssuesViewController1.h" 
#import "IssueView.h" 
#import "UIView+NibLoading.h" 

@interface AllIssuesViewController1() 

@end 

@implementation AllIssuesViewController1 


- (void) loadView 
{ 

} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    _issueView = [IssueView loadInstanceFromNib]; 
} 

它给了我一个错误:

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x8292580> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key label1.' 

我有一个扩展的UIView称为UIView的+ NibLoading类别。

在它的代码...

#import "UIView+NibLoading.h" 

@implementation UIView (NibLoading) 

+ (id)loadInstanceFromNib 
{ 
    UIView *result; 

    NSArray* elements = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:nil options:nil]; 

    for (id anObject in elements) { 
     if ([anObject isKindOfClass:[self class]]) { 
      result = anObject; 
      break; 
     } 
    } 

    return result; 
} 

@end 

然后,当我想从实例化一个笔尖一个UIView子类,我只是进口类,我可以运行...

self.issueView = [IssueView loadInstanceFromNib];\ 

您需要将这些标签连接这样的...

enter image description here

我如果您将标签连接到“文件所有者”,那么您需要删除这些连接。

+0

非常感谢您的回复。我假设我必须在界面生成器的文件检查器中将我的IssueView设置为MainView的类?并连接网点? –

+0

是的,将IB文件的主视图设置为IssueView。 (注意,将文件的所有者保留为NSObject,并且你必须调用这些文件同样的东西blah.h和blah.m和blah.xib – Fogmeister

+0

我得到一个错误看我的更新它发生在类 - 在它表示NSArray *元素的行上...... –