0

複数のビューを持つアプリケーションを開発しています。xlibファイルで作成した画像ギャラリーのテンプレートがあります。このビューは、スクロールビューの単一ページとして読み込まれます。次の方法で、xlibからビューを複数回ロードすることができます。

- (void)registerForKeyboardNotifications
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWasShown:)
                                                 name:UIKeyboardDidShowNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillBeHidden:)
                                                 name:UIKeyboardWillHideNotification object:nil];

}
- (id)initWithFrame:(CGRect)frame
{
    self = [[[NSBundle mainBundle] loadNibNamed:@"GSEstimateView" owner:self options:NULL] lastObject];
    self.commentText.delegate = self;
    self.scrollView.delegate = self;
    self.commentText.delegate =self;
    [self registerForKeyboardNotifications];
    return self;
}

私が直面している最初の問題は、キーボードが表示されたときに、keyboardWasShown:メソッドが作成した数のUIViewに対して呼び出されることです。2番目のUIViewからキーボードをロードしようとすると、無効なセレクターが呼び出されるという例外が発生します。UIViewはペン先またはxlibシングルトンからロードされますか?UIViewインスタンスをnibファイルからロードした場合に通知するにはどうすればよいですか?

4

1 に答える 1

0

(^.^)「こんにちは、私の英語が下手で申し訳ありませんが、編集を訂正していただけると幸いです」

こんにちは、まず、NSNotification を使用することはお勧めしません。このようなプロトコルを使用することをお勧めします。

@protocol KeyBoardDelegate <NSObject>
- (void)KeyBoardVisible:(BOOL)op;
@end

複数のビューがあり、ビュー コントロールを次のようにしたい場合:

  • * viewDidLoad、viewDidUnload、viewWillDisappear、viewWillAppear など *

このような UIViewController のビューを使用することをお勧めします。

UIViewControllerCustom *example = [[UIViewControllerCustom alloc] initWithNibName:@"exampleNIB" bundle:[NSBundle mainBundle]];
[self.view addSubview:example.view];

これを使用して、例のビューコントローラーのビューを制御し、メソッドを使用できます

- (void)viewDidLoad{
  [super viewDidLoad];
  //When the nib has been loaded.
}

- (void)viewWillAppear:(BOOL)animated{
  [super viewWillAppear:animated];
  //When the view is show.
}

- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
//The view is hidden
}

- (void)viewDidUnload{
[super viewDidUnload];
// Release any retained subviews of the main view.
}

そして、いくつかの方法があります。:)

于 2012-04-23T03:55:02.930 に答える