【问题标题】:UITextField not saving textUITextField 不保存文本
【发布时间】:2011-12-06 20:41:39
【问题描述】:

我有一个包含几个UITextFields 的视图。我还有一个高级UISegmentController 可以改变视图。当我在字段中输入文本,然后按隐藏键盘按钮,然后更改分段时,它保存得很好。但是当我输入文本,并且不按下释放键盘按钮,然后切换段时,它不会保存文本。

我该如何解决这个问题?

这是我自定义的UITableViewCellUITextField 的一些代码:

- (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
{
}

编辑:

- (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;
}

【问题讨论】:

  • 您需要提供用于处理和存储文本的代码

标签: iphone objective-c cocoa-touch uitextfield uisegmentedcontrol


【解决方案1】:

你没有任何写作功能。

- (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];
}

【讨论】:

  • valueChanged 方法触发另一个名为 - (int)saveDataToServer 的类中的方法,该方法保存数据。当我用按钮释放键盘时一切正常,但有时使用不要按下它而只是切换视图,这样文本就不会被保存。我添加了这个方法来提问
  • 我发布答案时,该部分代码不可用。
  • 是的,我刚刚添加了它。
  • 尝试发布 updatePatientWorkflowClinicalChecklistForAppointment 源代码,因为您发布的代码都没有显示您如何“保存”数据、将数据保存到何处以及为什么不保存。
  • 该方法所做的只是将数据传递给服务器。该方法很好,问题是 textField 中的文本未保存,因此如果未释放键盘,则不会将其传递给该方法。
【解决方案2】:

您不能将这两个事件链接到同一个操作吗?也许您可以在名为 needsSaving 的头文件中创建一个 BOOL。每次开始编辑时设置为 NO,每次数据保存成功时设置为 YES。然后只在需要保存为 NO 时执行保存方法的主体,这将避免不必要的保存。我认为这样做会简化您的应用程序的此功能。即

- (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;
}

【讨论】:

    【解决方案3】:

    在我看来,您没有实施 UITextFieldDelegate 协议。

    【讨论】:

    • 也就是说,不完全:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    相关资源
    最近更新 更多