0

テキストフィールドをタップしてキーボードが表示されたときにビューを上に移動させるコードを作成しようとしています。テキストフィールドを含むビューは、プログラムの起動時に最初に表示されるものではありません。だから私はViewControllerにいくつかのコードを書いた

 - (void)viewDidLoad {
 [super viewDidLoad];
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
 }

-(void)keyboardDidShow:(NSNotification*)notification {
   NSDictionary* userInfo = [notification userInfo];
   NSValue* value = [userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];
   CGSize keyboardSize = [value CGRectValue].size;

   gm.frame = CGRectMake(gm.frame.origin.x, gm.frame.origin.y, gm.frame.size.width, gm.frame.size.height-keyboardSize.height);
}

-(void)keyboarDidHide:(NSNotification*)notification {
   gm.frame = CGRectMake(gm.frame.origin.x, gm.frame.origin.y, gm.frame.size.width, gm.frame.size.height);
}

gm はテキストフィールドを含むビューです:

@class gameOverMenu;

@interface RootViewController : UIViewController {
    gameOverMenu* gm;
}
@end

したがって、テキストフィールドをタップすると、これらのメソッドがプログラムに実行されますが、何も起こりません。つまり、ビューはキーボードで移動されず、キーボードを非表示にすることはできません。なんでそうなの?

4

3 に答える 3

0

このコードは私のために働きます:

- (void)viewDidLoad {
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
}

-(void)keyboardDidShow:(NSNotification*)notification {
    NSDictionary* userInfo = [notification userInfo];
    NSValue* value = [userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];
    CGSize keyboardSize = [value CGRectValue].size;

    webView.frame = CGRectMake(webView.frame.origin.x, webView.frame.origin.y, webView.frame.size.width, webView.frame.size.height-keyboardSize.height);
}

-(void)keyboardDidHide:(NSNotification*)notification {
    NSDictionary* userInfo = [notification userInfo];
    NSValue* value = [userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];
    CGSize keyboardSize = [value CGRectValue].size;

    webView.frame = CGRectMake(webView.frame.origin.x, webView.frame.origin.y, webView.frame.size.width, webView.frame.size.height+keyboardSize.height);
}
于 2012-04-22T14:58:31.323 に答える
0

boundsの代わりに使ってみてくださいframe。アンカリングが邪魔かもしれません。

于 2012-04-22T12:59:00.243 に答える
0

上に移動しますか、それともサイズを変更しますか? これは機能しますか?

-(void)keyboardDidShow:(NSNotification*)notification {
   NSDictionary* userInfo = [notification userInfo];
   NSValue* value = [userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];
   CGSize keyboardSize = [value CGRectValue].size;

   gm.frame = CGRectMake(gm.frame.origin.x, gm.frame.origin.y-keyboardSize.height, gm.frame.size.width, gm.frame.size.height);
}

-(void)keyboarDidHide:(NSNotification*)notification {
   NSDictionary* userInfo = [notification userInfo];
   NSValue* value = [userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];
   CGSize keyboardSize = [value CGRectValue].size;

   gm.frame = CGRectMake(gm.frame.origin.x, gm.frame.origin.y+keyboardSize.height, gm.frame.size.width, gm.frame.size.height);
}
于 2012-04-22T13:11:12.623 に答える