iOS - Text Field(文本域)
使用文本字段
文本字段的重要属性如下:
-
不需要用户输入占位符文本时显示
-
普通文本
-
自动校正类型
-
键盘类型
-
返回键的类型
-
清除按钮模式
-
对齐方式
-
委托
更新属性 xib
可以在 xib 更改文本字段属性在属性检查在工具程序区(右侧窗口)。
文本字段的委托
我们可以设置在Interface Builder代表右击UIElement的将它连接到文件的所有者,如下图所示。
使用委托的步骤
1. 如上图所示,设置委托
2. 委托类响应
3. 实现 TextField 委托,最重要的文本字段委托如下
- (void)textFieldDidBeginEditing:(UITextField *)textField
- (void)textFieldDidEndEditing:(UITextField *)textField
4. 正如其名称所义,一旦我们开始编辑的文本字段和结束分别编辑上述两个委托被调用。
5. 对于其他代表,请参阅UITextDelegate协议参考。
示例代码和步骤
1. 我们将使用示例应用程序创建UI元素
2. ViewController 类会采用 UITextFieldDelegate,更新如下我们的ViewController.h文件。
#import <UIKit/UIKit.h> // You can notice the adddition of UITextFieldDelegate below @interface ViewController : UIViewController<UITextFieldDelegate> @end
3. 然后,我们添加了一个的方法addTextField 在 ViewController.m 文件。
4. 在 viewDidLoad方法中调用此方法。
5. 更新 ViewController.m 和 viewDidLoad 如下
#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //The custom method to create our textfield is called [self addTextField]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } -(void)addTextField{ // This allocates a label UILabel *prefixLabel = [[UILabel alloc]initWithFrame:CGRectZero]; //This sets the label text prefixLabel.text =@"## "; // This sets the font for the label [prefixLabel setFont:[UIFont boldSystemFontOfSize:14]]; // This fits the frame to size of the text [prefixLabel sizeToFit]; // This allocates the textfield and sets its frame UITextField *textField = [[UITextField alloc] initWithFrame: CGRectMake(20, 50, 280, 30)]; // This sets the border style of the text field textField.borderStyle = UITextBorderStyleRoundedRect; textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; [textField setFont:[UIFont boldSystemFontOfSize:12]]; //Placeholder text is displayed when no text is typed textField.placeholder = @"Simple Text field"; //Prefix label is set as left view and the text starts after that textField.leftView = prefixLabel; //It set when the left prefixLabel to be displayed textField.leftViewMode = UITextFieldViewModeAlways; // Adds the textField to the view. [self.view addSubview:textField]; // sets the delegate to the current class textField.delegate = self; } // pragma mark is used for easy access of code in Xcode #pragma mark - TextField Delegates // This method is called once we click inside the textField -(void)textFieldDidBeginEditing:(UITextField *)textField{ NSLog(@"Text field did begin editing"); } // This method is called once we complete editing -(void)textFieldDidEndEditing:(UITextField *)textField{ NSLog(@"Text field ended editing"); } // This method enables or disables the processing of return key -(BOOL) textFieldShouldReturn:(UITextField *)textField{ [textField resignFirstResponder]; return YES; } - (void)viewDidUnload { label = nil; [super viewDidUnload]; } @end
6. 现在,当我们运行程序时,我们会得到下面的输出。
7. 委托方法被调用基于用户操作。查看控制台输出,知道什么时候被调用委托。