如何将textfield更改通知合并到textFieldDidEndEditing中

时间:2014-11-18 02:59:50

标签: ios objective-c uitableview

我有UITableView个自定义UITableViewCells,每个tableview单元格都有一个UITextField。默认情况下,文本字段已有一个可由用户编辑的标题。文本字段中的默认标题与NSFileManager中的文件相关联,当用户完成文本字段的编辑并点击“返回”时,会调用将文件名更改为用户输入的文件名的方法。这工作正常,但是当用户点击文本字段但没有进行任何编辑然后点击“返回”以转到上一个视图控制器时,我收到来自NSFileManager的警告,说文件名已经存在。这不会造成任何问题,但令人讨厌。我知道除非用户编辑文本字段,否则不应调用调用NSFileManager来更改文件名的方法,但我不确定实现它的最佳方法。

我看过这篇文章,但不确定如何将其纳入我正在做的事情中: UITextField text change event

我想知道是否有人可以给我一些如何使这项工作的技巧。

-(void) textFieldDidEndEditing:(UITextField *)textField
{
    textField.delegate = self;

    NSArray* cells = [self.audioTable visibleCells];
    for (OSAudioTableCell* cell in cells)
    {
        if (textField == cell.textField)
        {
            NSInteger index = cell.tag;  
            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0];
            Recording * recording = [self.fetchCon objectAtIndexPath:indexPath];

            NSString * previousPath = recording.audioURL;

            //I left a lot out, but this is where I call the method to change the file name

           NSString * returnedURL = [self.managedDocument changeFileName:previousPath withNewComponent:textField.text error:&aError];
         }
     }
}

3 个答案:

答案 0 :(得分:0)

试试这个。添加委托方法-(void)textFieldDidBeginEditing:(UITextField *)textField。在这种方法中做了类似的事情:

-(void)textFieldDidBeginEditing:(UITextField *)textField {
    self.textBeforeEditing = textField.text;
}

然后,在调用textFieldDidEndEditing时进行比较:

-(void) textFieldDidEndEditing:(UITextField *)textField {
    ...
    if(![self.textBeforeEditing isEqualToString:textField.text]) {
        // Change the file name
    }
    ...
}

答案 1 :(得分:0)

我只是检查textField的文本是否发生了变化。如果确实如此,则通过上面粘贴的块。如果没有,那就什么都不做。您可以通过在任何编辑发生之前保留对文本字段值的临时引用来执行此操作:

// At the top of your class
@property (strong, nonatomic) NSString *currentFileName; 

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
     _currentFileName = textField.text; 
}

然后在上面的方法中,我会检查两个字符串是否相等:

-(void) textFieldDidEndEditing:(UITextField *)textField
{
     if (![textField.text isEqualToString:currentFileName]) {
          // continue with your logic
     }
}

答案 2 :(得分:0)

您可以实现textFieldDidBeginEditing:,您可以在其中将UITextField的未编辑值存储在实例变量中。然后,在textFieldDidEndEditing:简单比较之前和之后的值,如果它们不同,请像往常一样调用NSFileManager方法。

实施例

@interface MyClass () {
    @property (strong, nonatomic) NSString *originalText;
}

@implementation MyClass
    - (void)textFieldDidBeginEditing:(UITextField *)textField {
        self.originalText = textField.text;
    }

    - (void)textFieldDidEndEditing:(UITextField *)textField {
        if ([self.originalText isEqualToString:textField.text]) {
            // Your original code here.
        }

        self.originalText = nil;
    }
@end