Reputation: 453
I am trying to save the text in the textfield when we are entering the text itself. for that I used the code as:
here eventTextField,eventPlaceTextField,wineryTitleLabel,vintageTextField are the textfields.
- (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;
}
The problem is here when I eneterd the text inside the text field for Ex:Hello and when the view moves up the text in the textfield is becoming as Hell.the last letter in the text in the texfield is not displaying.
Any one's help is well appreciated.
Upvotes: 0
Views: 462
Reputation: 44633
There are few things here:
When you assign,
event.eventName = eventTextField.text;
within the shouldChangeCharactersInRange: method you will assign the value of the text field before the change. So event.eventName will get "Hell" when you type in "Hello". I suspect you are setting the eventTextField's value to event.eventName somewhere else.
And from the looks of your code, I doubt you will be able to successfully enter a value in the vintageTextField. Even if the user would like to enter a valid year number, he will encounter an alert when he is about to enter the second digit in the text field.
As a tip,
[vintageTextField becomeFirstResponder];
[textField resignFirstResponder];
The second step is redundant as the first step would ensure that before making vintageTextField the first responder.
Upvotes: 1