0

私はこのstackoverflow投稿で説明されているアプローチを使用して、テキストフィールドから値を取得しています。私の問題は、テーブルビューがモーダルで表示されsave、入力を検証して保存するボタンがあることです。

問題は、ユーザーが(=モーダルビューを閉じる保存ボタン)をクリックしたときにtextFieldDidEndEditingメソッドが呼び出されないことです。UIBarButtonItem

この場合(ユーザーが入力を保存したい場合)、それを検証したいと思います。ただし、値はのプロパティに保存されますtextFieldDidEndEditing。このメソッドが呼び出されないため、入力値を正しく検証できません。

誰かがこれに関するヒントや解決策を持っていますか?

前もって感謝します!

4

2 に答える 2

2

テキストフィールドに一意のタグ番号を割り当ててから、デリゲートで現在アクティブなタグ番号を追跡し(つまり、int iVarを使用してアクティブなテキストフィールドのタグ値を格納します)textFieldDidBeginEditing、ユーザーが[保存]をクリックすると、最後のタグ番号を取得する必要があります。タグ値でテキストフィールドを作成し、次にテキスト値で確認できるようにします。

于 2012-07-24T14:14:41.880 に答える
0

さて、ここに行きます:

@Lefterisと、現在のインデックスを保存するという彼のアイデアに感謝します。インデックスをtag属性に保存できないため、アクティブを保存しindexPath、さらにアクティブを保存することにしましたtextField。(私は知っています、への参照はUITextField十分だったでしょうが、私は他のもののためにそれを必要としました)

まず、次の2つのプロパティを追加しました。

@property (nonatomic, strong) NSIndexPath *activeIndexPath;
@property (nonatomic, strong) UITextField *activeTextField;

次に、とを実装textFieldDidBeginEditing:しました。textFieldDidEndEditing:UITextFieldDelegate

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    NSIndexPath *indexPath = (NSIndexPath*)[self.tableView indexPathForCell:(UITableViewCell*)[[textField superview] superview]];

    self.activeTextField = textField;
    self.activeIndexPath = indexPath;
}

- (void)textFieldDidEndEditing:(UITextField *)textField 
{
    NSString *input = textField.text;    

    //assuming values from input textfield into corresponding properties
    [self assumeInput:input withIndexPath:self.activeIndexPath];

    self.activeTextField = nil;
    self.activeTextField = nil;
}

で、メソッドを使用しtextFieldDidEndEditing:て値をプロパティ(、、など)に保存していself.firstNameます。self.lastName[self assumeInput:input withIndexPath:self.activeIndexPath];

私のsaveAction-Methodでは、現在アクティブなの値を保存していますTextField

- (IBAction)saveButtonClicked:(UIBarButtonItem *)sender 
{    
    //assuming input from active field (didEndEditing _not_ called right now!)
    [self assumeInput:self.activeTextField.text withIndexPath:self.activeIndexPath];

    //test output
    NSLog(@"firstName: %@", self.firstName);
    NSLog(@"lastName: %@", self.lastName);
    NSLog(@"email: %@", self.email);
    ...
}

... 以上です!

それが役に立てば幸い!@Lefterisの入力に感謝します。

最高、クリス

于 2012-07-25T10:00:27.880 に答える