6

私はのサブクラスを持っていますUIViewController:

 @interface KBViewController : UIViewController

たとえばxib、1 つは でQwerty、もう 1 つはDvorakレイアウトです。

 KBViewControllerQuerty~iphone.xib
 KBViewControllerDvorak~iphone.xib

したがって、ユーザーがボタンをクリックすると、Qwertyに切り替わりますDvorak。ご覧のとおり、コード ロジックは両方のキーボード レイアウトで同じです。view必要なのは、別の をリロードすることxibです。

うまくいけば、 のすべてのボタンがの応答するDvorak xibへのフックになります。IBOutletKBViewController

xib2 つの sを切り替える正しい方法は何ですか?

4

2 に答える 2

7

すべてのペン先には、指定された がありFile's Ownerます。IBOutlet と IBAction のリンクは、File's Owner. したがって、View Controller と 2 つの Nib を定義し、各 Nib ファイルFile's Ownerを定義済みの View Controller に設定できます。

つまりFile's Owner、すべての KBViewController*.xib ファイルを KBViewController に設定し、どこかに KBViewController オブジェクトがある場合、必要な KBViewController*.xib をinitWithNibNamedメソッドでロードできます (View Controller を再作成します)。

ずっと同じ KBViewController オブジェクトを維持する必要がある場合は、Nib なしで KBViewController オブジェクトを作成できます。loadViewKBViewController.m で、メソッドを使用して UIView オブジェクトを実装し、手動でロードします-[NSBundle loadNibNamed](self.view をプログラムでロードおよび変更します)。

UIView *someView = [[[NSBundle mainBundle] loadNibNamed:@"SomeNibFile"
                                                  owner:self
                                                options:nil] objectAtIndex:0];
self.view = someView;

owner:self上記のコードに注意してください。File's Owner@"SomeNib​​File" と一致する必要があります。

すでに読み込まれているビューを変更するには:

id superview = self.view.superview;
[self.view removeFromSuperview];
UIView *someView = [[[NSBundle mainBundle] loadNibNamed:@"SomeNibFile"
                                                  owner:self
                                                options:nil] objectAtIndex:0];
self.view = someView;
[superview addSubview:self.view];

より詳細な説明: Resource Programming Guide - Loading Nib Files Programmatically

于 2013-01-24T10:19:46.770 に答える
0

nib ファイルを手動でロードしview、View Controller の属性を変更するか、必要なビューをそれぞれ変更できます。

    UIView *someView = [[[NSBundle mainBundle] loadNibNamed:@"SomeNibFile"
                                                      owner:self
                                                    options:nil] objectAtIndex:0];

nibファイルにルートオブジェクトが1objectAtIndex:0つしかない場合にのみ正しいUIView

ビューを読み込んだ後、設定できます

self.view = someView;

もちろん、View Controller にサブビューがある場合は、それも変更できます。

于 2013-01-24T08:51:51.897 に答える