美文网首页
UITextField文本框

UITextField文本框

作者: 我不白先生 | 来源:发表于2020-10-05 15:32 被阅读0次

UITextField文本框

接收用户输入的内容

  • 属性:
    text获取或设置文本框中的文本
    UITextField *textField2 = [[UITextField alloc]init]; textField2.frame = CGRectMake(100, 250, 200, 40); textField2.borderStyle = UITextBorderStyleRoundedRect; [self.view addSubview:textField2];

placeHolder提示性文字如:
self.textField1.placeholder = @"请输入用户名";
borderStyle(RoundedRect)边框样式

/*UITextBorderStyleNone,
    UITextBorderStyleLine,//黑线框
    UITextBorderStyleBezel,//黑线框 带阴影
    UITextBorderStyleRoundedRect圆角矩形*/
    self.textField1.borderStyle = UITextBorderStyleNone;

background(UIImage)背景图片
self.textField1.background = [UIImage imageNamed:@"BTN"];

  • 如何关闭键盘?
  1. 方法一:只要让文本框失去焦点即可。失去焦点也叫放弃第一响应者身份
    [text resignFirstResponder];
    2.方法二:如果界面中文本框过多,希望批量关闭所有文本框弹出的键盘。则设置文本框的父视图结束编辑状态即可
  • 键盘有关的操控:
    系统私下做的事:针对用户点击文本框的动作,系统提供了一个响应:即让文本框称为第一响应者,然后系统又弹出了键盘
    如果想关闭键盘,只需要让文本框放弃第一响应者身份即可
    成为第一响应者:[textField1 becomeFirstResponder],调用此方法的结果就是弹出键盘
    放弃第一响应者身份:[textField1 resignFirstResponder],调用此方法的结果就是收起键盘
    如果需要关闭的文本框的键盘较多,可以直接调用所有文本框的父视图的方法,结束编辑状态,则所有键盘都关闭[view endEditing:YES]
    //结束 textField1的第一响应者身份
    [self.textField1 resignFirstResponder];
    //结束 textField2的第一响应者身份
    //从self.view 取出 textField 这个子视图
    UITextField *tf2 = [self.view viewWithTag:100];
    [tf2 resignFirstResponder];
    //结束父视图的编辑状态 一旦结束了父视图的编辑状态,无论它里面的子视图无论谁在获取焦点,全部都取消
    [self.view endEditing:YES];
  • 关闭键盘时机
    i.点击某个控件
    ii.点击视图的任意处,实现控制器的touchesBegan方法
    iii.点击键盘的return键,需要设置文本框的代理
  • 练习有文本框两个如何按下return收起键盘
@interface MyViewController ()
@property(nonatomic,strong)UITextField *tf1;
@property(nonatomic,strong)UITextField *tf2;
@end
@implementation MyViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //如果编辑第一个 文本框 让 第二个文本框获取第一响应身份
     if(self.tf1.isFirstResponder)
   {
      [self.tf2 becomeFirstResponder];
       return;
   }
    //如果编辑第二个 文本框 让 第二个文本框获取第一响应身份
    if(self.tf2.isFirstResponder)
    {
        [self.tf2 becomeFirstResponder];
    }
}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    self.tf1 = [[UITextField alloc]init];
    self.tf1.frame = CGRectMake(50, 200, 200, 50);
    self.tf1.placeholder = @"请输入用户名";
    //UIControlEventEditingDidEndOnExit 文件输入框点击return键的事件
    [self.tf1 addTarget:self action:@selector(textFieldClickReturn:) forControlEvents:UIControlEventEditingDidEndOnExit];
    [self.view addSubview:self.tf1];
    self.tf2 = [[UITextField alloc]init];
    self.tf2.frame = CGRectMake(50, 300, 200, 50);
    self.tf2.placeholder = @"请输入用户名";
    [self.tf2 addTarget:self action:@selector(textFieldClickReturn:) forControlEvents:UIControlEventEditingDidEndOnExit];
    [self.view addSubview:self.tf2];
}
//如果UIControlEventEditingDidEndOnExit 事件方法一旦实现,不用写任何代码键盘都会回收
-(void)textFieldClickReturn:(UITextField*)  sender{
    if(self.tf1 == sender)
    [self.tf2 becomeFirstResponder];
}
  • 由输入文本框内容点击return生成多个label
@interface MyViewController ()
@property(nonatomic,assign)NSInteger y;
@end

@implementation MyViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.y = 20;
    self.view.backgroundColor = [UIColor whiteColor];
    UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(20, self.y, self.view.frame.size.width - 40, 40)];
    textField.placeholder = @"请输入内容";
    textField.borderStyle = UITextBorderStyleLine;
    //添加点击return事件方法
    [textField addTarget:self action:@selector(addLabel:) forControlEvents:UIControlEventEditingDidEndOnExit];
    
    [self.view addSubview:textField];
    self.y += textField.frame.size.height +20;
}
-(void)addLabel:(UITextField*) sender
{
    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(20, self.y, self.view.frame.size.width, 40)];
    label.text = sender.text;
    label.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:label];
    self.y += label.frame.size.height +20;
    //清空输入框中内容
    sender.text = @"";
}

相关文章

网友评论

      本文标题:UITextField文本框

      本文链接:https://www.haomeiwen.com/subject/avdeuktx.html