博客> 弹出view
弹出view
2017-06-25 17:49 评论:0 阅读:240 pinglan_z
ios

独立开发项目中,有下面这样一个需求:

在一个UITextField上点击后,不是弹出键盘,而是弹出一个UIDatePicker,让用户选择时间日期,选择完毕后,显示在UITextField中,这是一个弹出view,同样,作为独立学习ios开发的过程,没有查到更好的实现方法,于是自己做了一个简单的实现。思路如下:

  1. 在点击UITextField的代理函数中,实现弹出UIDatePicker的功能。
  2. 弹出的view是一个半透明的覆盖整个屏幕的view,在屏幕的下半部分,放置一个UIDatePicker,并在UIDatePicker的上方放置一个按钮。用户选完后,点击按钮,获取数据,同时半透明的弹出 view消失,露出原来被覆盖的界面。

整个功能是在UITextField的代理函数-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField中实现的,只记录其中的内容。

  1. 首先定义一个覆盖全屏幕的容器view,并通过设置坐标来使其隐藏

        CGRect frame = self.view.frame;  
        int nWidth = self.view.frame.size.width;
        int nHeight = self.view.frame.size.height;
        //先设置容器view的y坐标在屏幕的底端,即隐藏,在后续用动画来显示
        CGRect frame = CGRectMack(0,nHeight,nWidth,nHeight);
         UIView* backGroundView = [[UIView alloc]initWithFrame:frame];             
         backGroundView.backgroundColor = [UIColor whiteColor];
         backGroundView.alpha = 0.9;
         backGroundView.tag = 1001;
  2. 将UIDatePicker放置到容器view中,约占1/3的屏幕

        UIDatePicker* dateDeadLine = [[UIDatePicker alloc]initWithFrame:CGRectMake(0, nHeight *2 / 3, nWidth, nHeight / 3)];
    dateDeadLine.alpha = 1.0;
    dateDeadLine.tag = 1000;
    dateDeadLine.locale = [NSLocale localeWithLocaleIdentifier:@"zh-hans"];       
    [backGroundView addSubview:dateDeadLine];
  3. 在UIDatePicker上方放置一个按钮

    UIButton* btnDateOk = [[UIButton alloc]initWithFrame:CGRectMake(0, nHeight * 2 / 3 - 40, nWidth, 40)];
    [btnDateOk setTitle:@"选好了" forState:UIControlStateNormal];
    btnDateOk.layer.cornerRadius = 20;
    btnDateOk.layer.masksToBounds = YES;
    btnDateOk.backgroundColor = [UIColor blueColor];
    [btnDateOk addTarget:self action:@selector(dateSelectOKTap:)                     
        forControlEvents:UIControlEventTouchUpInside];
    [backGroundView addSubview:btnDateOk];
  4. 将容器view添加到父视图中,并用动画的方式弹出

    [self.view addSubview: backGroundView];
    //弹出动画,将容器view连带他的子view呈现出来
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    [backGroundView setFrame:CGRectMake(0, 0, nWidth, nHeight)];
    [UIView commitAnimations];
  5. 点击按钮后,弹出view消失,并记录下选择的date

        -(void)dateSelectOKTap:(UIButton*)sender
        {
            UIDatePicker* picker = (UIDatePicker*)[self.scroll viewWithTag:1000];
            NSDate* dateDeadline = picker.date;                
            NSDateFormatter* dateFm = [[NSDateFormatter alloc]init];
            [dateFm setDateFormat:@"yyyy年MM月dd日:HH时mm分"];
            NSString* date = [dateFm stringFromDate:dateDeadline];
            UIView* background = (UIView*)[self.scroll viewWithTag:1001];
            [picker removeFromSuperview];
            [background removeFromSuperview];
            //这是对应的UITextView
            UITextField* tfDate = (UITextField*)[self.scroll viewWithTag:1002];
            tfDate.text = date;              
        }

感觉自己写的这样的弹出view比较不“官方”,不知道大家是不是这么实现的,路过的高手请指点一下。

收藏
1
sina weixin mail 回到顶部