2010-02-01 83 views
0

我试图在输入文本本身时将文本保存在文本字段中。 因为我使用的代码如下:UITextField显示问题

here eventTextField,eventPlaceTextField,wineryTitleLabel,vintageTextField是文本字段。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 

    if(textField == eventTextField) 
    { 
     printf("\n ===============in ths didchange %s",[eventTextField.text UTF8String]); 
     event.eventName = eventTextField.text; 
    } 
    else if(textField == eventPlaceTextField) 
    { 
     event.eventPlace = eventPlaceTextField.text; 
    } 
    else if(textField == wineryTitleLabel) 
    { 
     event.eventWinery = wineryTitleLabel.text; 
    } 
    else if(textField == vintageTextField) 
    { 
     int vintageVal = [vintageTextField.text intValue]; 
     if([vintageTextField.text length] == 4 || [vintageTextField.text length]==0) 
     { 
      event.eventVintage = vintageVal; 
     } 
     else 
     { 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"!!!MESSAGE !!!" message:@"Enter the Vintage in the format 'YYYY'" 
                  delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [alert show]; 
      [alert release]; 
      return NO; 
     } 
    } 
    return YES; 
} 


- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 

    NSInteger nextTag = textField.tag + 1;// Try to find next responder 
    UIResponder* nextResponder = [textField.superview viewWithTag:nextTag]; 
    if (nextResponder) 
    { 
     // Found next responder, so set it. 
     [nextResponder becomeFirstResponder]; 
    } 
    else 
    { 
     if(textField == eventTextField) 
     { 
      [eventPlaceTextField becomeFirstResponder]; 
      [textField resignFirstResponder]; 
     } 
     else if(textField == eventPlaceTextField) 
     { 
      [wineryTitleLabel becomeFirstResponder]; 
      [textField resignFirstResponder]; 
     } 
     else if(textField == wineryTitleLabel) 
     { 
      [vintageTextField becomeFirstResponder]; 
      [textField resignFirstResponder]; 
     } 
    } 

    if(textField == vintageTextField) 
    { 

     [self setViewMovedUp:NO]; 
     [textField resignFirstResponder]; 
    } 

    return YES; 
} 

的问题是这里的时候,我eneterd文本字段中的文本防爆:您好,当视图中的文本字段向上移动文本在texfield变得像Hell.the最后一个字母的文字不显示。

任何人的帮助很受赞赏。

+0

你能格式化一下吗? 4个空格给出了代码格式。 这是所有文本字段或只有一个问题。 – 2010-02-01 05:54:42

+0

是dis是所有文本字段的相同问题。 – monish 2010-02-01 06:39:52

+1

只是一个提示 - 使用'isEqualTo:'比较文本字段而不是简单的'=='。 – Eimantas 2010-02-01 06:47:09

回答

1

这里有几件事情:

当您指定,

event.eventName = eventTextField.text; 

的shouldChangeCharactersInRange内:方法,你会改变之前分配的文本字段的值。所以当你输入“Hello”时,event.eventName将会得到“Hell”。我怀疑你在其他地方将eventTextField的值设置为event.eventName。

从代码的外观来看,我怀疑你能够在vintageTextField中成功输入一个值。即使用户想要输入有效的年份号码,当他要输入文本字段中的第二个数字时,他也会遇到警报。

作为尖端,

[vintageTextField becomeFirstResponder]; 
[textField resignFirstResponder]; 

第二个步骤是多余的,因为在第一步骤将确保使vintageTextField第一响应者之前。

+0

是的,你是绝对正确的。我已经完成了你所说的所有事情。请根据你的建议修改代码。非常感谢你的帮助。 – monish 2010-02-01 08:19:04