美文网首页
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