10-UIKit(UIDatePicker、UIPickerView、UIWebView、Storyboard)
目录:
1. UIDatePicker
1.1 获取用户选择的日期:
NSDate *date = [UIDatePicker date];
1.2 需要设置的属性:
Mode: 时间, 日期, 日期和时间…
Locale: 设置地区,比如中文等
Date: 初始日期,一般为当前日期
NSDate *selectedDate = [self.datePicke date]; //将世界标准时间 转换为 本地时间 //创建时间格式对象 NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; //设置时间格式 dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; //调用stringFromDate方法将当前时间(或用户选择的时间)转换为本地时间 NSString* str = [dateFormatter stringFromDate:selectedDate]; self.dateLabel.text = [NSString stringWithFormat:@"%@",str];
2. UIPickerView
2.1 功能:
让用户在列表中选择一条数据
2.2 数据来源:
UIPickerViewDatasource, UIPickerViewDelegate
需要设置数据源和委托,回答问题
多少列(Component), 每列多少行(Row)
每行的内容:
可以是NSString字符串
也可以是NSAttributeString属性字符串
更可以是UIView的视图对象
2.3 选择后的响应方法
// 有多少列 -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ return ; } // 每一列有多少行 -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ return self.areas.count; } // 每一行的内容,这个方法是在代理中 -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ return self.areas[row]; } // 获取选择了哪一个 -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ self.label.text = self.areas[row]; }
3. UIPickerView多列关联
3.1 关联的关键是将数据模型关联起来
areas: NSDictionary: (key :NSString, value:NSArray)
cites: NSArray (keys)
regions : NSArray (valueForKey)
3.2 当选择城市时,调用方法,方法中将regions中的数据换掉,然后刷新界面:
pickerView reloadComponent:
3.2 代码方式选择某一行:
pickerView selectRow:inComponent:animated:
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ if (component == ) { self.regions = [self.areas valueForKey:self.cities[row]]; [pickerView reloadComponent:]; [pickerView selectRow: inComponent: animated:YES]; } }
4. UIWebView
4.1 属性:
Scaling Page to Fit 选中
4.2 加载网页:
NSURL : http://www.apple.com.cn
NSURLRequest
webView loadRequest:
- (IBAction)goWeb:(UITextField *)sender { NSURL *url = [NSURL URLWithString:sender.text]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [self.webView loadRequest:request]; }
5. Storyboard(故事板)
5.1 是什么
是一堆nib文件,放到一个文件中
5.2 干什么
管理所有的界面相关的信息以及界面与界面之间的跳转
5.3 基本概念
自iOS5开始, Xcode5中创建项目默认使用Storyboard
替代nib文件(95%)
Storyboard xib
Scene(场景) 一个xib文件
initWithCoder: initWithNibName:bundle:
5.4 好处
减少代码量
直观,清晰
所有的View集中到一起
不需要代码指定rootViewController, 由Storyboard自动完成
5.5 VC-Modal跳转
1)拖拽一个VC(黄球)
2)在旧场景中的按钮上拉线到新场景,创建Segua,选择Modal模式
可以选择建好的Segua, 设置其属性:
Identifier : 标识符,用于区别多个Segua
Style : 可选择跳转的模式(Modal或push)
Transition: 选择跳转的动画
3)新界面-VC
如果新界面不需要写代码, 那也就不需要创建新的类与新场景绑定
如果新界面中需要写代码控制,那就需要创建新类:
1)创建一个继承自UIViewController的类
注意不要选择with xib for user interface
2)点击新场景,设置类绑定
3) 其他和以前一样,如设置返回按钮:
4) 界面返回:
千万不要用连线的方式返回
连接一个方法,dismiss…
5.6 VC-push
1) 需要Navigation包含:
选择需要包含的场景
Editor-->Embed In --> Navigation Controller
2) 从旧场景中的按钮上拉线到新场景,创建segua, 选择push模式
相当于从NavigationController中push了一个新场景
5.7 Navigation和Modal一起使用
从一个Navigation跳转到另一个Navigation,应该使用Modal模式
5.8 正向传值
1) 做为跳转连线(创建Segue)
2) 接收参数的VC(Segue的目的地):
1> 拖拽显示控件到界面,增加属性
2> 重写viewWillAppear,根据数据刷新显示
3> 定义公开属性用来接收传入的参数
3) 设置Segue 的标准符:
在Storyboard中找到Segue, 打开检查器4, 设置Identifier属性,起个名字
4)重写 prepareForSegue 方法,进行传值
1>打开源VC代码
2>重写prepareForSegue
3>使用segue.identifier属性区分哪个Segua
4> 使用segue.destinationViewController属性获取目标VC
5> 给目标VC中的属性赋值,达到传参的目的。
5) 如果目标VC被包含在一个Navigation中,则拿到的目标VC是navi,此时需要如下操作才可得到真正的目标VC:
// 在segue跳转前自动调用此方法,只要segue跳转都会调用此方法,正向传值 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ if ([segue.identifier isEqualToString:@"GoCViewController"]) { NSString *parameter = @"我是参数"; // 目的地VC MXCViewController *destination = segue.destinationViewController; destination.data = parameter;//传参 } if ([segue.identifier isEqualToString:@"GoNaviViewController"]) { NSString *parameter = @""; UINavigationController *navi = segue.destinationViewController; MXBViewController *destination = (MXBViewController *)navi.topViewController; destination.data = parameter; } }
5.9 Navigation配置
1) title
直接点击场景上的NavigationBar, 编辑
2) navigation item (左右按钮)
一个按钮直接拖拽
多个按钮:
只能用代码,跟以前一样
3)toolbar
1>设置显示
选择NavigationController
检查器4 选中 Show ToolBar
2>给被包含的VC加按钮
拖拽
3>不同的VC可以配置不同的Toolbar
如果没有配置VC的toolbar时,不希望push时显示出来:
选中VC,检查器4: Hide Bottom Bar On Push
4)自定义头视图
直接拖拽一些控件到NavigationBar上使用
或者拖拽一个UIView做为头视图,UIView中可以随便布局子视图
以前的xib方式下,用代码写:
self.navigationItem.titleView = …..;
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:UIView];
5.10 TabBarController
1)第一方式
拖拽一个Tabbar黄球
删除不需要的子场景
接线从TabBarController到你要的场景中,注意要选择view controllers
2) 第二方式
选择需要包含的VC
Editor-->Embed In --> Tab Bar Controller
3) 配置
title, image
点击具体的VC下的TabBar, 修改Title, 检查器4中选择image
5.11 和旧的xib代码兼容
在Storyboard中跳转到xib文件:
连线IBAction, 调用方法,方法中和以前一样:
创建VC对象(initWithNibName:bundle:), 然后present或push
在Storyboard中不使用Segue来进行代码跳转到其他场景:
在要跳转的那个VC中设置一个属性storyboard ID(第三个检查器),然后使用present进行跳转
UIViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MyScene"];
[self presentViewController:viewController animated:YES completion:nil];
补充:
arc4random() % 5 随机产生0~4其中一个
10-UIKit(UIDatePicker、UIPickerView、UIWebView、Storyboard)的更多相关文章
- MyEclipse 10.7(版本:eclipse 3.7.x-Indigo系列)安装activiti-eclipse-plugin插件(流程设计器)
基本信息 1.本机MyEclipse 10.7菜单[Help->About MyEclipse Enterprise Workbench]的版本信息: MyEclipse Enterprise ...
- 2015.10.11(js判断鼠标进入容器的方向)
判断鼠标进入容器的方向 1.前几天在万圣节专题项目中用到了鼠标坐标page事件,随着鼠标背景图片移动形成有层次感的效果,但page事件在IE低版本不支持,所以还要做兼容.在研究page事件同时无意中想 ...
- MyEclipse 10.7(版本:eclipse 3.7.x-Indigo系列)安装PyDev 4.5.4插件
解压安装路径结构如截图所示: 安装后重启:
- 神舟K650c i7(W350STQ)上成功装好Mac OS X 10.9,兼谈如何安装WinXP、7、8.1、OSX、Ubuntu五系统(Chameleon、MBR)
作者:zyl910 参考教程——http://bbs.pcbeta.com/viewthread-1432534-1-4.html笔记本SNB和IVY平台Win7/Win8/Win8.1安装OS X ...
- WCF分布式开发步步为赢(10):请求应答(Request-Reply)、单向操作(One-Way)、回调操作(Call Back).
WCF除了支持经典的请求应答(Request-Reply)模式外,还提供了什么操作调用模式,他们有什么不同以及我们如何在开发中使用这些操作调用模式.今天本节文章里会详细介绍.WCF分布式开发步步为赢( ...
- 【Java】 大话数据结构(10) 查找算法(1)(顺序、二分、插值、斐波那契查找)
本文根据<大话数据结构>一书,实现了Java版的顺序查找.折半查找.插值查找.斐波那契查找. 注:为与书一致,记录均从下标为1开始. 顺序表查找 顺序查找 顺序查找(Sequential ...
- PHP7 学习笔记(一)Ubuntu 16.04 编译安装Nginx-1.10.3、 PHP7.0.9、Redis3.0 扩展、Phalcon3.1 扩展、Swoole1.9.8 扩展、ssh2扩展(全程编译安装)
==================== PHP 7.0 编译安装================== wget http://cn2.php.net/get/php-7.0.9.tar.bz2/fr ...
- 【Linux命令】文本文件编辑命令10个(cat、more、less、head、tail、tr、wc、stat、cut、diff)
目录 cat查看文档 more可分页查看文档 less相比较more功能更强大 head查看文档的前N行 tail查看文档的后N行或试试刷新查看 tr替换文本字符 wc统计文本行数 stat查看文档存 ...
- spark 1.6.0 安装与配置(spark1.6.0、Ubuntu14.04、hadoop2.6.0、scala2.10.6、jdk1.7)
前几天刚着实研究spark,spark安装与配置是入门的关键,本人也是根据网上各位大神的教程,尝试配置,发现版本对应最为关键.现将自己的安装与配置过程介绍如下,如有兴趣的同学可以尝试安装.所谓工欲善其 ...
随机推荐
- Objective-c 协议(protocol)
协议的作用类似地C++中对抽象基类的多重继承.类似于Java中的接口(interface)的概念. 协议是多个类共享方法的列表,协议中列出的方法在本类中并没有相应实现,而是别的类来实现这些方法. ...
- VMware: linux起步提示 memory for crashkernel(0*0 to 0*0)not within permissible
(virtualbox/VMware)linux起步提示memoryforcrashkernel(0*0 to 0*0)notwithinpermissible http://www.myexcep ...
- Java 取得当前日期之后N天的日期 zz
链接地址:http://blog.sina.com.cn/s/blog_483486840100vrjn.html public static String afterNDay(int n){ ...
- poj2774之最长公共子串
Long Long Message Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 18794 Accepted: 77 ...
- 微信开放平台 获取 component_verify_ticket
<?php /** * @author zhaozhuobin * @date:2016-06=07 * */ namespace common\components;use DOMDocume ...
- QT通过IP地址定位地址(用get方法取数据)
通过IP地址定位地址,是要通过查询数据库,如果自己做一个这样的数据库工作量就比较大,所以在网上找了一个查询IP地址的网址,通过调用这个网址查询来实现,但是这个有一定的弊端,如果没有网络或者这个网址不可 ...
- python yaml使用
YAML Ain't Markup Language 和GNU一样,YAML是一个递归着说“不”的名字.不同的是,GNU对UNIX说不,YAML说不的对象是XML. YAML不是XML. 为什么不是X ...
- Uva 10935 Throwing cards away I
题目意思:有N张牌,标号为1~N,且牌以叠好,从上到小就是标号1-N的牌,只要牌堆数量大于等于2的时候,就采取如下操作:将最上面的牌扔掉(即离开牌堆).刚才那张牌离开后,再将新的最上面的牌放置于牌堆最 ...
- java学习之tcp与udp的实现
package com.gh.socket; import java.io.BufferedReader; import java.io.IOException; import java.io.Inp ...
- 周根项《一分钟速算》全集播放&下载地址
点击图片就可以观看 ↓↓↓↓↓↓↓↓ 第1章:指算法 周根项<一分钟速算>第1章:指算法 第一节 对手的认识 周根项<一分钟速算>第1章:指算法 第二节 个位数比十位数大1乘以 ...