美文网首页
iOS11后 UIToolbar 中 UIBarButtonI

iOS11后 UIToolbar 中 UIBarButtonI

作者: 长若执念 | 来源:发表于2018-11-05 11:21 被阅读122次

在iOS 9环境下,使用UITextField将UIDatePicker作为其inputView并设置一定高度,将UIToolbar作为其inputAccessoryView时,一起OK, 但是手机升级iOS11后,会出现UIToolbar非正常显示的问题;

代码如下:

-(void)setWaiChuDatePickViewUI {


//        [datePicker addTarget:self action:@selector(dateChange:) forControlEvents:UIControlEventValueChanged];
    
    // MARK: - 键盘
    // 1.创建控件
    UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, SCREEN_HEIGHT-200, SCREEN_WIDTH, 200)];
    datePicker.backgroundColor = [UIColor groupTableViewBackgroundColor];
    
    // 2.设置模式
    datePicker.datePickerMode = UIDatePickerModeDateAndTime; // UIDatePickerModeDate; // 日期模式
    // 3.设置语言
    //    datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];
    [self.datePicker setLocale:[NSLocale currentLocale]];  //datapicker 不显示上午下午,根据手机设置24/12小时制显示时间
    //    [self.datePicker setLocale:[NSLocale systemLocale]];  //datapicker 显示英文
    
    
    //默认为当天;
    [self.datePicker setCalendar:[NSCalendar currentCalendar]];
    //设置DatePicker的时区
     [self.datePicker setTimeZone:[NSTimeZone defaultTimeZone]];
    
    //最大日期和最小日期
    NSString *maxStr = @"2999-08-08 00:00:00";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSDate *maxDate = [dateFormatter dateFromString:maxStr];
    
//    datePicker.minimumDate = [NSDate date];//现在日期;
    datePicker.maximumDate = maxDate;
    
    self.datePicker = datePicker;
    self.datePicker.hidden = YES;
    [self.view addSubview:self.datePicker];
    
    
    // MARK: - 工具条
    UIToolbar *toolbar = [[UIToolbar alloc] init];
    self.toolbar = toolbar;
    // warning 可以不用设置宽度,系统自己会调整
    toolbar.frame = CGRectMake(0, SCREEN_HEIGHT-200-44, SCREEN_WIDTH, 44);
    // 3个按钮
    // 1.取消
    UIBarButtonItem *cancelItem = [[UIBarButtonItem alloc] initWithTitle:@"取消" style:UIBarButtonItemStylePlain target:self action:@selector(cancelItemClick:)];
   
    // 2.弹簧
    UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    
    // 3.确认
    UIBarButtonItem *confirmItem = [[UIBarButtonItem alloc] initWithTitle:@"确认" style:UIBarButtonItemStyleDone target:self action:@selector(confirmItemClick:)];
 
    
    // 保存所有按钮的数组
    toolbar.items = @[cancelItem, flexItem, confirmItem];

    self.toolbar.hidden = YES;
    [self.view addSubview:toolbar];
}


- (void)confirmItemClick:(UIBarButtonItem *)sender {
    
    // MARK: - 设置时间数据到文本框
    // 1.获取时间数据
    NSDate *date = self.datePicker.date;
    
    // 2.设置 NSDate =-> NSString
    // 2.1 日期格式化类
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyy-MM-dd HH:mm";
    
    // 2.2 转成字符串
    NSString *dateStr = [formatter stringFromDate:date];
    
    // 2.3 赋值
    if (self.isKaiShiQingJia) {
        self.qingjiaCell.kaishiLabel.text = dateStr;
    }else{
        self.qingjiaCell.jieshuLabel.text = dateStr;
    }
    
   
    // MARK: - 关闭键盘
    self.datePicker.hidden = YES;
    self.toolbar.hidden = YES;
    
}

#pragma mark - 点击取消时调用
- (void)cancelItemClick:(UIBarButtonItem *)sender {
    
    // 关闭键盘 取消第一响应者
    self.datePicker.hidden = YES;
    self.toolbar.hidden = YES;
    
}


iOS9 一切正常,iOS10也可以正常显示, 但是iOS11后, UIBarButtonItem 使用 'initWithTitle: style: target: action:' 方法, toolBar 上却不能显示出来,但是有相应的点击事件

增加代码:

 //iOS10之前不用增加下面这句代码就可以正常显示; iOS11 下 不显示'取消''确认'按钮的解决方法:
     [[UIBarButtonItem appearance]setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:16], NSFontAttributeName,nil]  forState:UIControlStateNormal];

相关文章

网友评论

      本文标题:iOS11后 UIToolbar 中 UIBarButtonI

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