UITextField is a type of view which can display a value just like the UILabel and also lets the user change it on the screen using the keyboard.
- Programmatically create UITextField and add them to the current view
- Set the border style
- Overlay custom views such as currency symbol, search icon, etc inside the view
- Vertical and Horizontal alignment of the Text
- Associate various keyboard types with the input text view
- Display Hint to the user when the text field is empty
- Display clear button on the text field
- Listen for events using the UITextField Delegate
- Restrict data entry to only certain types such as numeric only
- Restrict the number of maximun number of characters that are allowed in the text field
Interface file for the view controller – UITextFieldViewController.h
#import <UIKit/UIKit.h>
@interface UITextFieldViewController : UIViewController
@property (nonatomic, strong) UITextField *myTextField;
@property (nonatomic, strong) UILabel *myLabel;
@end
Implementation file for the view controller – UITextFieldViewController.m
#import "UITextFieldViewController.h"
@interface UITextFieldViewController ()
@end
@implementation UITextFieldViewController
@synthesize myTextField, myLabel;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor = [UIColor whiteColor];
//create a label with the local currency symbol
UILabel *dollarSign = [[UILabel alloc] initWithFrame:CGRectZero];
dollarSign.text = [[[NSNumberFormatter alloc] init] currencySymbol];
[dollarSign sizeToFit];
//create a label to display current user interaction with our editable text views
CGRect myFrame = CGRectMake(10.0f, 10.0f, 250.0f, 40.0f);
self.myLabel = [[UILabel alloc] initWithFrame:myFrame];
self.myLabel.text = @“Mycodetips…”;
self.myLabel.font = [UIFont boldSystemFontOfSize:16.0f];
self.myLabel.textAlignment = NSTextAlignmentLeft;
[self.view addSubview:self.myLabel];
//lets create 3 UITextViews on the screen
for (NSInteger i=1; i<4; i++) {
//set the origin of the frame reference
myFrame.origin.y += myFrame.size.height + 10.0f;
//create the text field
self.myTextField = [[UITextField alloc] initWithFrame:myFrame];
//set the border style for the text view
self.myTextField.borderStyle = UITextBorderStyleRoundedRect;
switch (i) {
case 1:
//the vertical alignment of text within the frame, set this to center
self.myTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
//the horizontal alignment of the text
self.myTextField.textAlignment = NSTextAlignmentLeft;
//set the type of the keyboard to display
self.myTextField.keyboardType = UIKeyboardTypeDecimalPad;
//display the currency symbol in the left of the text field view
self.myTextField.leftView = dollarSign;
self.myTextField.leftViewMode = UITextFieldViewModeAlways;
break;
case 2:
self.myTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentTop;
self.myTextField.textAlignment = NSTextAlignmentCenter;
break;
case 3:
self.myTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentBottom;
self.myTextField.textAlignment = NSTextAlignmentRight;
self.myTextField.keyboardType = UIKeyboardTypeEmailAddress;
break;
default:
self.myTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentBottom;
self.myTextField.textAlignment = NSTextAlignmentCenter;
break;
}
//display hint for the user data entry when the field is empty
self.myTextField.placeholder = [NSString stringWithFormat:@"Enter data in field %i", i];
//add tag to identify your text views
self.myTextField.tag = i;
//display the clear button on the text field
self.myTextField.clearButtonMode = UITextFieldViewModeAlways;
//change the return key text to "Done"
self.myTextField.returnKeyType = UIReturnKeyDone;
//set the delegate for the text field to the view controller so that it can listen for events
self.myTextField.delegate = self;
//add the text field to the current view
[self.view addSubview:self.myTextField];
}
}
//Asks the delegate if editing should begin in the specified text field.
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
return YES;
}
//Tells the delegate that editing began for the specified text field.
- (void)textFieldDidBeginEditing:(UITextField *)textField{
NSInteger i = textField.tag;
self.myLabel.text = [NSString stringWithFormat:@"Begin editing Text field %i", i];
}
//Asks the delegate if editing should stop in the specified text field.
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
return YES;
}
//Tells the delegate that editing stopped for the specified text field.
- (void)textFieldDidEndEditing:(UITextField *)textField{
NSInteger i = textField.tag;
self.myLabel.text = [NSString stringWithFormat:@"Editing done for Text field %i", i];
}
//Asks the delegate if the specified text should be changed.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string{
//get the current data strsing inside the text field
NSString *myTextData = [textField.text stringByReplacingCharactersInRange:range
withString:string];
NSLog(@"Current data in text field is %@", myTextData);
NSCharacterSet * set = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet];
NSInteger i = textField.tag;
switch (i) {
case 1:
//first field should only have numeric data otherwise don't allow change
if ([string rangeOfCharacterFromSet:set].location != NSNotFound) {
return NO;
}
break;
default:
//don't allow more than 15 characters
if ([myTextData length] > 15) {
return NO;
}
break;
}
//set the display label value with the current data in the text field
self.myLabel.text = [NSString stringWithFormat:@"Data: %@", myTextData];
return YES;
}
//Asks the delegate if the text field’s current contents should be removed.
- (BOOL)textFieldShouldClear:(UITextField *)textField{
NSInteger i = textField.tag;
NSLog(@"Text field %i just got cleared", i);
return YES;
}
//Asks the delegate if the text field should process the pressing of the return button.
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
//Notifies the receiver that it has been asked to relinquish
//its status as first responder in its window.
[textField resignFirstResponder];
return YES;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
Discover more from CODE t!ps
Subscribe to get the latest posts sent to your email.