0

UITextFieldキーボードがイン/アウトするときにビューを上下に移動するがあります。

- (IBAction)moveUp;
- (IBAction)moveDown;

ビューを「Editing Did Begin」で上に移動し、「Did End On Exit」で下に移動します(StackOverflow のスレッドで見つけました)。

ただし、ボタン(右下)の「キーボードを隠す」を押すと、ビューは下に移動しません。これは明らかに「Editing Did End」に応答します。

奇妙なことに、「Editing Did End」も
moveDown に接続すると、メソッド moveDown が 2 回呼び出されます (そして、はるか下の画面に移動します!) その後、「Did End On Exit」を切断接続すると、ビューは以前と同じように、「戻る」ボタンを押すと消えます。

ここで何がうまくいかないのですか?

//ステファン

4

3 に答える 3

1

メソッドを接続してテキスト フィールドのイベントを制御する代わりに、2 つの通知に応答してメソッドを起動する必要がUIKeyboardDidShowNotificationありますUIKeyboardDidHideNotification。でこれらの通知のオブザーバーとして自分を追加し、で-viewDidLoad自分を削除するだけ-viewDidUnloadです。

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
    [notificationCenter addObserver:self selector:@selector(moveUp) name:UIKeyboardDidShowNotification object:nil];
    [notificationCenter addObserver:self selector:@selector(moveDown) name:UIKeyboardDidHideNotification object:nil];
}

- (void)viewDidUnload
{
    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
    [notificationCenter removeObserver:self name:UIKeyboardDidShowNotification object:nil];
    [notificationCenter removeObserver:self name:UIKeyboardDidHideNotification object:nil];
}
于 2012-01-11T18:34:04.750 に答える
0

UIControl で定義されている「Editing Did Begin」と「Editing Did End on Exit」を使用するのではなく、テキスト フィールドにデリゲートを割り当て、UITextFieldDelegate プロトコルで定義されている textFieldDidEndEditing: メソッドを使用することをお勧めします。これは、必要なときに起動すると思います。

于 2010-11-07T21:08:51.067 に答える
0

「Editing Sid End」ではなく、「Did End On Exit」に接続していることを確認してください。これらの名前は少し紛らわしいです。

于 2012-01-11T18:27:12.147 に答える