UITextField не сохраняет текст - PullRequest
       9

UITextField не сохраняет текст

1 голос
/ 07 декабря 2011

У меня есть вид с несколькими UITextFields в нем. У меня также есть высокий уровень UISegmentController, который меняет представление. Когда я ввожу текст в поле, затем нажимаю кнопку «Скрыть клавиатуру», а затем меняю сегменты, это хорошо сохраняется. Но когда я ввожу текст и не нажимаю кнопку разблокировки клавиатуры, а затем переключаю сегменты, текст не сохраняется.

Как я могу это исправить?

Вот некоторый код для UITextField в моем обычае UITableViewCell:

- (IBAction)col2_doubleValueChanged:(id)sender
{
    NSString *newValue = [NSString stringWithFormat:@"%@/%@", self.col2_doubleEntryValue_1.text, self.col2_doubleEntryValue_2.text];
    NSMutableDictionary *result = [[[NSMutableDictionary alloc] init] autorelease];
    [result setValue:self.row_key forKey:@"row_key"];
    [result setValue:@"1" forKey:@"column"];
    [result setValue:newValue forKey:@"col2_value"];
    [[self delegate] editDidFinish:result];
    [[self delegate] valueChanged];
}

- (IBAction)col2_singleValueEditDidBegin:(id)sender
{
}

enter image description here

Edit:

- (void)valueChanged
{
    self.dirtyFlag = 1;
}

- (int)saveDataToServer
{
    [self.tableView resignFirstResponder];

    if (!dirtyFlag) {
        return 0;
    }    

    NSString *errors = [DataSource updatePatientWorkflowClinicalChecklistForAppointment:[[[DrChronoDataSource getCurrentAppointment] valueForKey:@"appointment_id"] intValue] clinicalInfo:self.clinicalChecklist checklistId:[self.clinicalChecklistId intValue] patientWorkflowServerId:patientWorkflowServerId];

    if ((NULL == errors) || ![errors isEqualToString: @""]) {
        //Show error messages.
        if (NULL == errors) {
            errors = @"Failed to save data to server.  Please retry.";
        }
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Status" message:errors delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        [alert release];
        return -1;
    } else {
        [self dismissModalViewControllerAnimated:FALSE];
    }

    self.dirtyFlag = 0;
    return 0;
}

Ответы [ 3 ]

1 голос
/ 07 декабря 2011

У вас нет функций записи.

- (IBAction)col2_doubleValueChanged:(id)sender
{
    NSString *newValue = [NSString stringWithFormat:@"%@/%@", self.col2_doubleEntryValue_1.text, self.col2_doubleEntryValue_2.text];
    NSMutableDictionary *result = [[[NSMutableDictionary alloc] init] autorelease];
    [result setValue:self.row_key forKey:@"row_key"];
    [result setValue:@"1" forKey:@"column"];
    [result setValue:newValue forKey:@"col2_value"];

    /* your aren't writing the new data anywhere, 
       you need to add something like this: 
     */

    [result writeToFile: @"somefile.txt" atomically: YES];

    [[self delegate] editDidFinish:result];
    [[self delegate] valueChanged];
}
0 голосов
/ 07 декабря 2011

Похоже, вы не используете протоколы UITextFieldDelegate .

0 голосов
/ 07 декабря 2011

Не могли бы вы связать оба события с одним и тем же действием?Может быть, вы могли бы сделать BOOL в вашем заголовочном файле с именем needsSaving.Установите значение NO каждый раз, когда начинается редактирование, затем YES каждый раз, когда данные успешно сохраняются.Затем выполняйте только тело ваших методов сохранения, если needsSaving НЕТ, что позволит избежать ненужного сохранения.Я думаю, что это упростит эту функцию вашего приложения.т.е.

- (IBAction)col2_singleValueEditDidBegin:(id)sender {
    needsSaving = YES;
}

- (int)saveDataToServer
{
    [self.tableView resignFirstResponder];

    if (!dirtyFlag || !needsSaving) {
        return 0;
    }

    NSString *errors = [DataSource updatePatientWorkflowClinicalChecklistForAppointment:[[[DrChronoDataSource getCurrentAppointment] valueForKey:@"appointment_id"] intValue] clinicalInfo:self.clinicalChecklist checklistId:[self.clinicalChecklistId intValue] patientWorkflowServerId:patientWorkflowServerId];

    if ((NULL == errors) || ![errors isEqualToString: @""]) {
        //Show error messages.
        if (NULL == errors) {
            errors = @"Failed to save data to server.  Please retry.";
        }
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Status" message:errors delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        [alert release];
        return -1;
    } else {
        needsSaving = NO;
        [self dismissModalViewControllerAnimated:FALSE];
    }

    self.dirtyFlag = 0;
    return 0;
}
...