`

新风作浪博客学习(七)代码 实现UIDatePicker控件 和 Tab Bar 视图切换 .

    博客分类:
  • ios
ios 
阅读更多
感觉代码写控件都一个理,先在ViewDidLoad中创建控件对象,然后初始化他的frame,在简单的描叙下他们的相关属性,最后在添加到视图上;这样控件就在视图上显示出来了;

        UIDatePicker是一个用来选择日期或设置日期的控件,他不是UIPickerView子类,而是UIControl的子类,当然它所依赖的类也是与实践有关的类,NSDate;苹果公司已经为你实现好了这个控件是怎么实现的,它底层怎么实现你不必了解,你只需调用相关API就可以了;

        上一文中写了Navigation Bar   和ToolBar的视图切换,这一节把Tab Bar视图切换也加上,切换两个不同格式下的日历表,还是先把效果图奉上吧(界面不咋好看):


前面两个tab Bar item图标是系统的图标,后面一个是添加了一张背景图片,但是不知道问什么没有显示,切换界面的两个按钮还是前面两个Tab Bar Item;
[img]

[/img],[img]

[/img]




1.创建一个新工程叫DatePickerDemo; File->New->Project ->single View Application -> next
[img]

[/img]





2.然后在新建两个ViewController分别叫FirstViewController和SecondViewController
[img]

[/img]




3.设置UITabBarDelegate协议,在ViewController中,
#import <UIKit/UIKit.h>
#import "FirstViewController.h"
#import "SecondViewController.h"
@interface ViewController : UIViewController<UITabBarDelegate>
{
    UIDatePicker *datePicker;
    UITabBar *tabBar;
    FirstViewController *firstViewController;
    SecondViewController *secondViewCOntroller;
}

@end





4.在ViewController.m文件的ViewDidLoad中创建初始化界面
- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
//    初始化Tab Bar
    tabBar = [[UITabBar alloc] initWithFrame:CGRectMake(0, 416, 320, 44)];
  //设置Tab Bar上的交互属性为YES
    [tabBar setUserInteractionEnabled:YES];
//    设置代理
    [tabBar setDelegate:self];
//    设置TabBar的背景颜色
    [tabBar setBackgroundColor:[UIColor purpleColor]];
//    设置tabBar的透明度
    tabBar.alpha = 0.5f;
    
//    定义一个可变数组存放tab Bar Item
    NSMutableArray *tabBarArray= [NSMutableArray array];
//    初始化一个Tab Bar Item  到数组中
    [tabBarArray addObject:[[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites
                                                                     tag:1]];
    [tabBarArray addObject:[[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemHistory
                                                                     tag:2]];
    
    UIImage *image = [UIImage imageNamed:@"test48.png"];
    [tabBarArray addObject:[[UITabBarItem alloc]initWithTitle:@"测试" image:image tag:3]];
    
//    给Tab Bar 添加数组里的tab Bar Item
    [tabBar setItems:tabBarArray animated:NO];
    [self.view addSubview:tabBar];

    
//    datePicker宽度320像素和高度216像素,系统都设置好了,只需设置一下他的远点坐标,
    datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
    
//    设置datePicker显示模式
    [datePicker setDatePickerMode:UIDatePickerModeDateAndTime];
    
//DatePicker属于UIControl子类,可以触发事件,当滚动滑轮滑轮停下后就调用这个方法了
    [datePicker addTarget:self action:@selector(dateChanged:) forControlEvents:UIControlEventValueChanged];
    
    [self.view addSubview:datePicker];
    }








5.设置日历控件的响应事件
-(void)dateChanged:(id)sender
{
    UIDatePicker *control = (UIDatePicker*)sender;
//    把当前控件设置的时间赋给date
    NSDate *date = control.date;
//    将NSDate格式装换成NSString类型
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
//    设置日历显示格式
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//    把日历时间传给字符串
    NSString *strDate = [dateFormatter stringFromDate:date];
    
    NSString *message = [[NSString alloc]initWithFormat:@"你选取的时间是:%@",strDate];
//      弹出一个警告                  
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"温馨提示"
                                                    message:message
                                                   delegate:self
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles: nil];
//    显示警告
    [alert show];

}


这里涉及到了一个NSDate向NSString的转换问题
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *strDate = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"%@", strDate);



NSString向NSDate如何转换
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [dateFormatter dateFromString:@"2012-07-04 9:03:03"];
NSLog(@"%@", date)







6.UITabBarDelegate的委托方法
-(void)tabBar:(UITabBar *)tabBarBar didSelectItem:(UITabBarItem *)item
{
    
    if (item.tag == 1) {
     //   [tabBar setSelectedItem:[tabBar.items objectAtIndex:0]];
        NSLog(@"---->%d",item.tag);
        if(firstViewController.view.superview==nil)
        {
            if (firstViewController.view==nil) {
                  
        FirstViewController *firstView = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
            firstViewController=firstView;
            }
            [secondViewCOntroller.view removeFromSuperview];
//            [self.view insertSubview:firstViewController.view atIndex:0];
            [self.view  addSubview:firstViewController.view];
        }
        else {
            [secondViewCOntroller.view removeFromSuperview];
//              [self.view insertSubview:firstViewController.view atIndex:0];
            [self.view  addSubview:firstViewController.view];

        }
        
    
    }
    if (item.tag == 2) {
       
        if (secondViewCOntroller.view.superview==nil) {
            if (secondViewCOntroller.view == nil)
            {
                
            SecondViewController *secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
            secondViewCOntroller=secondView;
            }
            [firstViewController.view removeFromSuperview];
            [self.view insertSubview:secondViewCOntroller.view atIndex:0];

        }
        else {
            [firstViewController.view removeFromSuperview];
            [self.view insertSubview:secondViewCOntroller.view atIndex:0];

        }
        
        }
        
    

    NSLog(@"---->%d",item.tag);
}



在方法中我们看到有Item.tag是在ViewDidLoad给Tab Bar Item设定的tag,相当于给这个按钮编了一个号码,这个号码代表这个按钮;再点击不同按钮的时候切换不同视图,这个方法和上一博客所用的视图切换方法思想一样,只是没有添加动画效果,首先判断第一个视图父视图是否为空,在判断在试图是否为空,为空则创新创建一个,初始化并把管理权交给该视图控制器,移去原来的视图,把现在视图切换过去;
[self.view insertSubview:firstViewController.view atIndex:0];

            [self.view addSubview:firstViewController.view];



在方法中我把第一个给注释了,第一个是插入主视图后面,出现的情况就是主视图上的DatePicker把插入给覆盖了,显示不出来,第二种是之间把切换的视图放在主视图上面,但是这个问题出来了,他把主视图下面的Tab Bar给覆盖了,于是我把需要切换的视图的frame高度设置成了460-44高度,在FirstViewController的ViewDidLoad方法中

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.view.frame = CGRectMake(0, 0, 320, 416);
    
    self.view.backgroundColor = [UIColor blueColor];
    UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
    
    //    设置datePicker显示模式
    [datePicker setDatePickerMode:UIDatePickerModeTime];  
    [self.view addSubview:datePicker];
}



在item.tag=2中,并未这样做,只是想做一下对比,在我们前面看见的这个界面的截图并没有完全显示SecondViewController视图上的内容,他被ViewController上的视图覆盖了,在SeconViewController上的ViewDidLoad初始化是这样的
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.view.backgroundColor = [UIColor greenColor];
    UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
    
    //    设置datePicker显示模式
    [datePicker setDatePickerMode:UIDatePickerModeDate];
    [self.view addSubview:datePicker];
}






[datePickersetDatePickerMode:UIDatePickerModeDateAndTime];设置日历显示模式,有四种模式
typedefenum { 

UIDatePickerModeDateAndTime,

    UIDatePickerModeTime,           

    UIDatePickerModeDate,           

    UIDatePickerModeCountDownTimer   

} UIDatePickerMode;


[img]

[/img] [img]

[/img] [img]

[/img] [img]

[/img]







  • 大小: 119.7 KB
  • 大小: 164.1 KB
  • 大小: 183.1 KB
  • 大小: 204.4 KB
  • 大小: 111 KB
  • 大小: 101.7 KB
  • 大小: 113.3 KB
  • 大小: 96.5 KB
分享到:
评论

相关推荐

    iOS开发中那些高效常用的宏 - 新风作浪的博客专栏 - 博客频道 - CSDN.NET1

    在iOS开发中,宏定义是Objective-C编程中一个非常实用的工具,它们可以用来简化代码、提高效率并增强代码的可读性。标题中的“iOS开发中那些高效常用的宏”指的是开发者在iOS应用开发过程中经常使用的宏定义,这些宏...

    基于Springboot的新风图书馆管理系统的设计与实现.docx

    ### 基于Springboot的新风图书馆管理系统的设计与实现 #### 1.1 系统的开发背景及意义 在当今社会,随着信息技术的快速发展,图书馆的传统管理模式面临着诸多挑战。传统的人工管理方式效率低下,难以满足现代图书...

    电子政务-具有电源自动切换电路的新风控制器.zip

    本资料"电子政务-具有电源自动切换电路的新风控制器.zip"聚焦于一种特殊的技术解决方案,即新风控制器,它内置了电源自动切换电路,这对于提升公共建筑或办公环境的能源管理和环境质量具有重要意义。 新风控制器是...

    新风系统简介PPT学习教案.pptx

    新风系统是一种用于室内空气质量改善的设备,它主要由风机、进风口、排风口和相关管道及接头组成。在不开启窗户的情况下,新风系统能够持续不断地将室外的新鲜空气引入室内,同时将室内的污浊空气排出,实现室内空气...

    新风系统设计PPT学习教案.pptx

    本PPT学习教案着重讲解了新风系统设计的相关知识,包括新风量的确定、新风负荷的计算以及新风设备的选择和布置。 新风量的确定是新风系统设计的基础,它基于三个主要因素:卫生要求、补充局部排风量和保持空调房间...

    基于PLC的洁净手术室净化空调新风机组自动控制设计与实现方法.pdf

    基于PLC的洁净手术室净化空调新风机组自动控制设计与实现方法主要关注于提高手术室空气质量,降低术后感染风险,确保患者在适宜的温度和湿度中更快恢复健康。该控制系统以可编程逻辑控制器(PLC)为核心,结合工控机...

    基于PLC和APP的新风机组远程监控系统设计与应用.pdf

    "基于PLC和APP的新风机组远程监控系统设计与应用" 本文研究了基于可编程逻辑控制器(PLC)和智能手机应用程序(APP)的新风机组远程集中监控系统的设计与应用。该系统旨在解决传统建筑的新风机组控制问题,实现智能...

    专业新风系统资料PPT学习教案.pptx

    专业新风系统资料PPT学习教案.pptx

    新风机控制系统模块整理.pdf

    这些组件之间通过电气连接和机械连接实现协调工作,从而实现新风机控制系统的自动化控制。 实训1:认知DDC新风机控制系统模块的组成 * 实训目的:认知DDC新风机控制系统模块的组成和功能。 * 实训步骤: 1. 在...

    新风系统设计重点PPT学习教案.pptx

    新风系统设计是建筑环境工程中的重要组成部分,其主要目的是为室内环境提供清新、健康的空气,同时保持室内气候的适宜性。以下是对新风系统设计关键知识点的详细解析: 1. **新风定义**:新风指的是从室外引入的...

    新风机组三种控制方案.doc

    新风机组的控制方案主要涉及三个关键方面:温度控制、湿度控制和设备保护。下面将分别详细介绍这三种控制方案。 一、新风机组温度控制方案 该方案利用比例积分(PI)温度控制器、温度传感器和电动调节阀实现精确的...

    组态王地下人防工程新风控制程序模拟.zip_人防工程必须建吗

    【组态王地下人防工程新风控制程序模拟】是一个基于“组态王”软件的项目,用于模拟和控制地下人防工程中的新风系统。人防工程,即人民防空工程,是为应对战争或其他紧急情况而建造的地下设施,其目的是保护人员的...

    新风合同.pdf

    从提供的文件信息中,我们仅能看到【标题】和【部分内容】,由于【描述】和【标签】为空,无法从中提取更多知识点。然而,根据给出的【标题】和【部分内容】,我们可以看出这是一个与“新风合同”相关的文件内容。该...

    新风系统的设计PPT学习教案.pptx

    新风系统设计是确保室内空气质量的关键,涉及到人体健康、能源效率和环境舒适度等多个方面。在新风系统设计中,首要任务是理解通风的基本概念及其目的。通风是通过自然或机械方式实现室内与室外空气的交换,以满足...

    基于Springboot的新风图书馆管理系统的设计与实现.pdf

    新风图书馆管理系统是一款基于Springboot框架构建的在线图书管理应用,旨在提高图书管理效率和用户借阅体验。系统设计遵循现代化的技术趋势,采用B/S(Browser/Server)架构,即浏览器/服务器模式,使得用户无需安装...

    机房新风系统介绍.pdf

    机房新风系统一般通过以下几种方式来实现其功能:自适应调节和热交换节能。它们利用优化逻辑控制技术实时监测室内外环境温湿度的实时变化,以及根据机房空间的分布情况,智能计算出最适宜的通风换气策略。 机房新风...

    2019年新风系统行业概览2020精品报告.rar

    新风系统,作为一种提高室内空气质量的有效手段,近年来在建筑领域得到了广泛应用。2019年的行业概览报告,结合了2020年的精品研究,为读者提供了全面深入的洞察,揭示了新风系统行业的最新趋势、市场规模、技术发展...

Global site tag (gtag.js) - Google Analytics