Reputation: 891
I have three UITextFields and I need the first to tab to the second when next is clicked and the second to tab to the third when next is clicked. And finally the third to hide the keyboard. And as a side question can the user hide the keyboard by clicking anywhere else on the screen on all of the text fields?
Here is my code:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
-(void) procrastinationNotificationSwitchOnOrOff {
if (_procrastinationNotificationSwitch.on) {
_notificationOnOffLabel.text = @"Procrastination Notification On";
self.notificationStatus = @"NOTIFICATION ON";
NSLog(self.notificationStatus);
}
else {
_notificationOnOffLabel.text = @"Procrastination Notification Off";
self.notificationStatus = @"NOTIFICATION OFF";
NSLog(self.notificationStatus);
}
}
-(void) presentMessage:(NSString *)message {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Class Stuff" message:message delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
}
-(void) notificationStatus:(NSString *)stat {
NSString *status = [NSString stringWithFormat:@"%@", stat];
}
-(IBAction)addButton:(id)sender {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
dateFormatter.timeZone = [NSTimeZone defaultTimeZone];
dateFormatter.timeStyle = NSDateFormatterShortStyle;
dateFormatter.dateStyle = NSDateFormatterShortStyle;
NSString *dateTimeString = [dateFormatter stringFromDate: dateTimePicker.date];
NSLog(@"Alarm Set Button Tapped : %@", dateTimeString );
NSString *classNameString = self.className.text;
NSLog(classNameString);
NSString *assignmentTitleString = self.assignmentTitle.text;
NSLog(assignmentTitleString);
NSString *assignmentDescriptionString = self.assignmentDescription.text;
NSLog(assignmentDescriptionString);
NSString *totalStrings = [NSString stringWithFormat:@"Class Name: %@\r Assignment Title: %@ \rAssignment Description: %@ \rDue: %@ \r%@", classNameString, assignmentTitleString, assignmentDescriptionString, dateTimeString, self.notificationStatus];
NSLog(totalStrings);
[self presentMessage:totalStrings];
}
-(IBAction)returnKeyButton:(id)sender {
[sender resignFirstResponder];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[_procrastinationNotificationSwitch addTarget:self action:@selector(procrastinationNotificationSwitchOnOrOff) forControlEvents:UIControlEventValueChanged];
self.notificationStatus = @"NOTIFICATION OFF";
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
Upvotes: 2
Views: 1646
Reputation: 11675
That's pretty simple. First of all, set your textFields with tag in a ascending way, like this. And also, set it's delegates to self:
//set up this somewhere
self.nameTextField.tag = 0;
self.nameTextField.delegate = self;
self.emailTextField.tag = 1;
self.emailTextField.delegate = self;
self.passwordTextField.tag = 2;
self.passwordTextField.delegate = self;
And then, implement the UITextField
delegate's method textFieldShouldReturn:
like below. Don't forget to add the UITextFieldDelegate
in your .h file:
In your ViewController.h
file:
@interface ViewController : UIViewController <UITextFieldDelegate>
And in your ViewController.m
file:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
NSUInteger index = textField.tag;
if (index == 2) { // Last textField
[textField resignFirstResponder];
}else{
UITextField *nextTextField = (UITextField*)[self.view viewWithTag:index+1];
[nextTextField becomeFirstResponder];
}
return NO;
}
This should answer your main question. And for the side question, that's simple too. You just have to add a UIGestureRecognizer
to your view, calling a method that resigns the firstResponder to the selected UITextField
. It will be something like this:
Set-up the gesture recognizer somewhere, like in your viewDidLoad
method
- (void)viewDidLoad
{
[super viewDidLoad];
UITapGestureRecognizer *dismissKeyboard = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:dismissKeyboard];
}
And implement the method that performs the dismiss, like this:
- (void)dismissKeyboard {
[self.view endEditing:YES];
}
Upvotes: 6