1

nib ファイルからカスタム ビューをインスタンス化する方法の例が必要です。いくつかのスタックオーバーフローの投稿に頭を悩ませましたが、わかりませんでした。多分私はそれを行う方法のヒントだけが必要です。

私がやりたいことは、インターフェースビルダーでカスタムビューを作成することです。複数のView Controllerに追加するために複数回インスタンス化できるように、テンプレートにする必要があります。

ここまでで、MyIssueView.xib という名前のカスタム ビュー xib ファイルを作成しました。実際には、メイン ビューといくつかのラベルだけで構成されています。

そして、MyIssueView.xib のラベルのアウトレットを使用して、IssueView と呼ばれる UIView のサブクラスを作成しました。

コンセントを IB に接続するにはどうすればよいですか? また、ViewController から IssueView をインスタンス化するにはどうすればよいですか?

例として嬉しいです!乾杯。

アップデート:

私は今持っています

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.'
4

1 に答える 1

8

UIView+NibLoading という UIView を拡張するカテゴリがあります。

その中にこのコードがあります...

#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];\

このようにラベルを接続する必要があります...

ここに画像の説明を入力

ラベルを「ファイルの所有者」に接続する場合は、それらの接続を削除する必要があります。

于 2012-11-26T07:56:28.750 に答える