0

iOS6

シーンに6つのUITextFieldがあり、次のシーンにセグエする次のボタンがあります。

以下のコードは、キーボードの[完了]ボタンを押すとうまく機能します。

- (IBAction)dismissKeyboard:(id)sender
{
    if (sender == LocationName) {
    self.meeting.LocationName = LocationName.text;
    }

    if (sender == LocationAddress) {
    self.meeting.LocationAddress = LocationAddress.text;
    }

    if (sender == LocationCity) {
    self.meeting.LocationCity = LocationCity.text;
    }

//I have 3 more text fields after and then I persist to CoreData:

    NSError *error = nil;
    if (![managedObjectContext save:&error]) {
    }

    [sender endEditing:YES];
}

ユーザーがキーボードの[完了]ボタンを押すと、データは正常に保存されます。

ただし、ユーザーが最初にキーボードの[完了]ボタンを押さずにナビゲーションバーの[次へ]ボタンを押すと、UITextfield内に入力したユーザーは保存されません。ユーザーがナビゲーションバーの[次へ]ボタンを押して次のシーンを呼び出すときに、すべてのフィールドにユーザーが入力したデータ(ユーザーがキーボードから入力したデータ)を保存したいと思います。

次のボタンのコードは次のとおりです。

- (IBAction)nextButtonPressed:(id)sender {

    [self dismissKeyboard:sender];
}

nextButtonPressedのコードが間違っていることはわかっています。どのUITextFieldがキーボードを呼び出して表示するかを特定し、Senderをパラメーターとして渡してdismissKeyboardを呼び出すのに助けが必要だと思います。

ありがとう

4

1 に答える 1

1

UITextFieldデリゲート メソッドを使用しtextFieldDidEndEditing:て、フォーカスがテキスト フィールドを離れるタイミングを把握します。これは、そのデータを保存する必要があるときです。これは、フォーカスが別のテキスト フィールドに移動したとき、またはキーボードが完全に閉じられたときに呼び出されます。

の実装は、次のテキスト フィールドが何であれ、nextButtonPressed:単純に呼び出す必要があります。becomeFirstResponderそれでおしまい。別のテキスト フィールドをファーストレスポンダーにすることで、前のテキスト フィールドのtextFieldDidEndEditing:デリゲートが呼び出されます。

アップデート:

// This assumes the LocationXXX are instance variables referencing the UITextFields
- (IBAction)nextButtonPressed:(id)sender {
    if (sender == LocationName) {
        [LocationAddress becomeFirstResponder];
    } else if (sender == LocationAddress) {
        [LocationCity becomeFirstResponder];
    // add the rest as needed
    }
}
于 2013-02-25T18:58:18.427 に答える