2015-10-05 5 views
-2

Я искал весь интернет и пробовал различные способы реализации UITextFieldShouldReturn, но когда я запускаю его в симуляторе, он просто не работает.UITextFieldShouldReturn не работает с моим кодом

То, что я пытаюсь сделать, это перейти от первого текстового поля (emailTextField) ко второму (nameTextField), когда пользователь нажимает следующую кнопку на клавиатуре. То же самое для клавиатуры второго текстового поля и отпустите клавиатуру, когда пользователь нажимает кнопку «Готово» в последнем текстовом поле (numberTextField).

Вот мой код, может ли кто-нибудь мне помочь?

#import "ViewController.h" 

@interface ViewController() <UITextFieldDelegate> 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
self.emailTextField.placeholder = @"Your Pitt Email(optional)"; 
self.nameTextField.placeholder = @"Lost ID Name"; 
self.numberTextField.placeholder = @"Lost ID Series Number(optional)"; 

[self.emailTextField.delegate self]; 
[self.nameTextField.delegate self]; 
[self.numberTextField.delegate self]; 

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)]; 
[self.view addGestureRecognizer:tap]; 
} 

- (void)didReceiveMemoryWarning { 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 

//release delegate 
-(void)dealloc{ 
self.emailTextField.delegate = nil; 
self.nameTextField.delegate = nil; 
self.numberTextField.delegate = nil; 
} 

//dismiss keyboard when it's called 
-(void)dismissKeyboard{ 
[self.emailTextField resignFirstResponder]; 
[self.nameTextField resignFirstResponder]; 
[self.numberTextField resignFirstResponder]; 
} 

//when a textfield begins editing, this will happen 
-(void)textFieldDidBeginEditing:(UITextField *)textField{ 
if(textField == self.emailTextField){ 
    textField.placeholder = @""; 
}else if(textField == self.nameTextField){ 
    textField.placeholder = @""; 
}else{ 
    textField.placeholder = @""; 
} 
} 

//when a textfield ends editing, this will happen 
-(void)textFieldDidEndEditing:(UITextField *)textField{ 
if(textField == self.emailTextField){ 
    textField.placeholder = @"Your Pitt Email(optional)"; 
    [self textFieldShouldReturn:self.emailTextField]; 
}else if(textField == self.nameTextField){ 
    textField.placeholder = @"Lost ID Name"; 
    [self textFieldShouldReturn:self.nameTextField]; 
}else{ 
    textField.placeholder = @"Lost ID Series Number(Optional)"; 
    [self textFieldShouldReturn:self.numberTextField]; 
} 
} 

//return button set up 
-(BOOL)textFieldShouldReturn:(UITextField *)textField{ 
[textField resignFirstResponder]; 
return YES; 
} 

//when confirm is pressed 
- (IBAction)confirmButton:(id)sender { 
[self dismissKeyboard]; 
} 
@end` 

This is my UI

+0

почему вы играете с заполнителем? он будет автоматически идти, когда вы начнете печатать ... –

ответ

1

Изменить

[self.emailTextField.delegate self]; 

в

self.emailTextField.delegate = self; 

Также удалите эти делегаты из dealloc. Вы можете поместить их в viewDidDisappear

+0

ЭТО РАБОТАЕТ! Спасибо огромное! Можете ли вы сказать мне, в чем разница? Почему точка работает, но квадратные скобки нет? –

+0

@JacksonWang: Я строго чувствую, как вы вызывали делегата, было неправильно ... –

-1

вы всегда можете использовать библиотеку, чтобы сделать то, что вам нужно сделать !! использование этой библиотеки: tpAvoidKeyboard

Узнайте, как использовать его и там вы идете все следующие кнопки и щелкает вне текстовых полей, чтобы закрыть клавиатуру и проделанная кнопку на последнем текстовом поле, чтобы закрыть клавиатуру, все эти функции уже реализовано

+0

Что вы хотите сделать, это следующие кнопки на клавиатуре из одного текстового поля в другое, и вы хотите, чтобы убрать клавиатуру в последнем текстовом поле?то эта библиотека должна работать для вас, я использовал ее раньше, и это awsome @FahimParkar –

1

Попробуйте этот фрагмент кода. Здесь я беру только два UITextFields.

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

    if (textField==_txtEmail) 
    { 
     [_txtEmail resignFirstResponder]; 
     [_txtPassword becomeFirstResponder]; 
    } 
    else if (textField==_txtPassword) 
    { 
     [_txtPassword resignFirstResponder]; 
    } 
    return YES; 
} 
+0

Отлично! Спасибо! –

0

Прежде всего, вам нужно установить права делегата. Затем вам нужно указать следующее текстовое поле: вызов becomeNextResponder, который должен быть идеально выполнен в методе делегата shouldReturn. В вашем способе viewDidLoad, вставьте это.

self.emailTextField.tag = 2000; 
self.nameTextField.tag = 3000; 
self.numberTextField.tag = 4000; 

Теперь измените метод textFieldShouldReturn так:

-(BOOL)textFieldShouldReturn:(UITextField *)textField{ 
[textField resignFirstResponder]; 
if(textfield.tag<4000) 
{ 
    UITextField *nextTextField = (UITextField *)[self.view viewWithTag:textField.tag+1000]; 
[nextTextField becomeFirstResponder]; 
} 
return YES; 
} 
0

Эта функция достаточно для возврата клавиатуры из текстовых полей.

-(BOOL)textFieldShouldReturn:(UITextField *)textField{ 
[textField resignFirstResponder]; 
return YES; 
} 

Ваши 3 линии не работают.

[self.emailTextField.delegate self]; 
[self.nameTextField.delegate self]; 
[self.numberTextField.delegate self]; 

Если вы используете раскадровку, соедините делегаты текстовых полей с представлением.

0

Вы можете использовать этот code.It работает для меня ..

-(void)tool{ 

UIToolbar *toolbar = [[UIToolbar alloc] init]; 
[toolbar setBarStyle:UIBarStyleBlackTranslucent]; 
[toolbar sizeToFit]; 

UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; 
UIBarButtonItem *doneButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(resignKeyboard)]; 
[doneButton setTintColor:[UIColor whiteColor]]; 

UIBarButtonItem *Next = [[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStylePlain target:self action:@selector(Nextbutton)]; 
[Next setTintColor:[UIColor whiteColor]]; 

NSArray *itemsArray = [NSArray arrayWithObjects:Next,flexButton,doneButton,nil]; 
[toolbar setItems:itemsArray]; 


[FirstNameTextField setInputAccessoryView:toolbar]; 
[LastNameTextfield setInputAccessoryView:toolbar]; 
[EmailAddressTextField setInputAccessoryView:toolbar]; 
[PasswordTextfield setInputAccessoryView:toolbar]; 
[ConfirmPasswordTextfield setInputAccessoryView:toolbar];} 

-(void)Nextbutton{ 
if ([FirstNameTextField isFirstResponder]) 
{ 
    [LastNameTextfield becomeFirstResponder]; 
} 
else if ([LastNameTextfield isFirstResponder]) 
{ 
    [EmailAddressTextField becomeFirstResponder]; 
} 
else if ([EmailAddressTextField isFirstResponder]) 
{ 
    [PasswordTextfield becomeFirstResponder]; 
} 
else if ([PasswordTextfield isFirstResponder]) 
{ 
    [ConfirmPasswordTextfield becomeFirstResponder]; 
} 
else if ([ConfirmPasswordTextfield isFirstResponder]) 
{ 
    [ConfirmPasswordTextfield resignFirstResponder]; 
}} 

-(void)resignKeyboard{ 
[FirstNameTextField resignFirstResponder]; 
[EmailAddressTextField resignFirstResponder]; 
[LastNameTextfield resignFirstResponder]; 
[PasswordTextfield resignFirstResponder]; 
[ConfirmPasswordTextfield resignFirstResponder];} 
+0

Отлично, это нормально работает. Спасибо чувак –