上篇介绍了UIButton、UILabel、UIImageView和UITextField,这篇就简短一点介绍UIScrollView和UIAlertView。

UIScrollView

  顾名思义也知道这个是和滚动相关的控件,在Android开发时遇到过ScrollView,当内容的尺寸超出了屏幕范围之后,用ScrollView则可以通过滚动的方式使得超出屏幕的那部分内容通过滚动的方式显示出来,在Android里面有水平的ScrollView和垂直的ScrollView,在iOS里面就只有一个ScrollView,而且这个ScrollView的功能更大,某些功能已经超出了ScrollView的作用范围了。下面则看一下ScrollView的一些属性

  • contentSize:CGSize类型,ScrollView的内容的实际大小;
  • contentOffset:CGPoint类型,ScrollView当前滚动到的位置,以视图的左上角来定位;
  • contentInset:UIEdgeInsets类型,用于增加ScrollView内容的滚动范围,相当于给ScrollView的四周补白;

下面则是其他属性

  • bounces:BOOL类型,是否有弹簧效果
  • scrollEnabled   :BOOL类型,是否能滚动
  • showsHorizontalScrollIndicator:BOOL类型,是否显示水平方向的滚动条
  • showsVerticalScrollIndicator:BOOL类型,是否显示垂直方向的滚动条
  • indicatorStyle:UIScrollViewIndicatorStyle类型,设定滚动条的样式,这个枚举类型有三个值
   UIScrollViewIndicatorStyleDefault
UIScrollViewIndicatorStyleBlack
UIScrollViewIndicatorStyleWhite
  • dragging:BOOL类型,是否正在被拖拽
  • tracking:BOOL类型,当touch后还没有拖动的时候值是YES,否则NO
  • decelerating:BOOL类型,是否正在减速
  • zooming:BOOL类型, 是否正在缩放

ScrollView的最直接的功能就是滑动,但是但是它还兼备着手势缩放(在Android中需要在ImageView中使用Matrix),还有滑动翻页的功能(在Android中是通过ViewPager是实现),下面都通过代码来实现,在viewDidLoad方法中加入

    UIImage *image=[UIImage imageNamed:@"Android Struct2.gif"];
self.imageView=[[UIImageView alloc]initWithImage:image];
self.imageView.tag=;
[self.scrollView addSubview:self.imageView];

  单纯通过上面的代码则可以实现滑动查看一幅图片的功能,一个UIScrollView其实也是一个容器,它里面的子空间都是通过addSubview方法添加进去,而最重要的则是通过设置contentSize这个属性来告诉UIScrollView究竟子控件的尺寸有多大。

  手势缩放的示例是在上面的基础上再作修改,如果只需要单纯地实现手势缩放,主要是实现了UIScrollView的- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView方法,同时也要设置UIScrollView的最大最小的缩放比例:minimumZoomScale属性和maximumZoomScale属性,在viewDidLoad方法中加入

    UIImage *image=[UIImage imageNamed:@"Android Struct2.gif"];
self.imageView=[[UIImageView alloc]initWithImage:image];
self.imageView.tag=;
[self.scrollView addSubview:self.imageView]; self.scrollView.contentSize=imageView.image.size;
self.scrollView.maximumZoomScale=;
self.scrollView.minimumZoomScale=0.2;
self.scrollView.delegate=self;

在视图控制器里面的类中加入下面的方法

-(UIView*) viewForZoomingInScrollView:(UIScrollView*)scrollView
{
return self.imageView;
}

如果要额外加一些手势则需要使用UITapGestureRecognizer,在viewDidLoad中加入

    UITapGestureRecognizer *twoFingerTapRecongizer=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewTwoFingerTapped)];
twoFingerTapRecongizer.numberOfTapsRequired=;
twoFingerTapRecongizer.numberOfTouchesRequired=;
[self.scrollView addGestureRecognizer:twoFingerTapRecongizer];

再定义下面这个方法

-(void)scrollViewTwoFingerTapped:(UITapGestureRecognizer*)recognizer
{
CGFloat newZoomScale=self.scrollView.zoomScale/1.5f;
newZoomScale =MAX(newZoomScale,self.scrollView.minimumZoomScale); [self.scrollView setZoomScale:newZoomScale animated:true];
}

  接下来说的是翻页功能,要想翻页功能最好是结合另一个控件UIPageControl,关于这个控件有几个属性要列举一下

  • numberOfPages : 总页数
  • currentPage : 当前的页码
  • hidesForSinglePage : 当只有一页的时候,是否要隐藏视图监听

要让UIScrollView进入翻页模式则需要设置pagingEnabled属性,把它设置成True。代码如下,在viewDidLoad中加入

     CGFloat w=self.view.frame.size.width;
CGFloat h=self.view.frame.size.height;
for(int i=;i<;i++)
{
UIImageView *imageView=[[UIImageView alloc]init];
imageView.frame=CGRectMake(i*w, , w, h);
imageView.image=[UIImage imageNamed:@"African Daisy.gif"]; [self.scrollView addSubview:imageView];
} self.scrollView.contentSize=CGSizeMake( *w, );
self.scrollView.showsHorizontalScrollIndicator=false;
self.scrollView.pagingEnabled=true;
self.scrollView.delegate=self; UIPageControl *pagecontrol=[[UIPageControl alloc] init];
pagecontrol.center=CGPointMake(w*0.5,h-);
pagecontrol.bounds=CGRectMake(, , , );
pagecontrol.numberOfPages=; pagecontrol.pageIndicatorTintColor=[UIColor grayColor];
pagecontrol.currentPageIndicatorTintColor=[UIColor whiteColor]; pagecontrol.enabled=false;
[self.view addSubview:pagecontrol];
_pageControl=pagecontrol; -(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
int page=scrollView.contentOffset.x/scrollView.frame.size.width;
_pageControl.currentPage=page;
}

UIAlertView

  UIAlertView是消息弹窗,它的作用与效果不用多说了,要使用UIAlertView的就需要让控制器实现UIAlertViewDelegate协议。有用到的属性如下

  • title:消息框的标题
  • message:消息框的内容
  • numberOfButtons:按钮总数
  • cancelButtonTitle:取消按钮的标题
  • cancelButtonIndex:取消按钮的索引
  • firstOtherButtonIndex:第一个其他类型按钮的索引
  • visible:消息框可视
  • alertViewStyle:UIAlertViewStyle类型,是消息框的类型,它是一个枚举类型,它的值如下
  • UIAlertViewStyleDefault 只弹信息和按钮
  • UIAlertViewStyleSecureTextInput 有一个textfield加密框
  • UIAlertViewStylePlainTextInput 有一个不加密的textfield
  • UIAlertViewStyleLoginAndPasswordInput 有两个textfield,Login和password

对于上面提到的按钮索引,是取消按钮和其他按钮组成的一个集合,其中第一个一般是Cancel按钮,它的索引是0,如果Cancel按钮没有设置,则它会是-1,其他则按添加的顺序。在iOS的消息框中,只有Cancel有特有名称,其他按钮则没有特有名称,都统称为OtherButton。

消息框的其中一个构造函数如下

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"AlertViewTest"
message:@"message"
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OtherBtn1",@"OtherBtn2",@"OtherBtn3",nil];

上面otherButtonTitles参数可以添加多个按钮。添加按钮除了在构造函数里面弄之外,还可以通过方法添加。如果不需要Cancel按钮,则给参数传一个nil值

[alert addButtonWithTitle:@"addButton"];

让消息框显示则需要调用下面的方法

[alert show];

消息框还有一系列的事件

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
//这个事件在消息框上面的按钮被点击之后触发,通过buttonIndex来确定究竟是哪个按钮被点击,然后采取相应的动作
}

还有其他6个事件方法

 -(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
//AlertView已经消失时执行的事件
} -(void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
//ALertView即将消失时的事件
} -(void)alertViewCancel:(UIAlertView *)alertView
{
//AlertView的取消按钮的事件,但这个事件一直我没有触发过
} -(void)didPresentAlertView:(UIAlertView *)alertView
{
//AlertView已经显示时的事件
} -(void)willPresentAlertView:(UIAlertView *)alertView
{
//AlertView即将显示时
} -(BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
{
//第一个触发的事件
}

对于上面一系列的事件大体可以分为两类,显示的事件,他们触发顺序如下

alertViewShouldEnableFirstOtherButton——>willPresentAlertView——>didPresentAlertView

另一类是消失的事件,是在点击后才会触发

clickedButtonAtIndex——>(如果会触发视图取消,则会调用alertViewCancel)willDismissWithButtonIndex——>didDismissWithButtonIndex

iOS 基础控件(下)的更多相关文章

  1. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

  2. [iOS基础控件 - 6.11.3] 私人通讯录Demo 控制器的数据传递、存储

    A.需求 1.搭建一个"私人通讯录"Demo 2.模拟登陆界面 账号 密码 记住密码开关 自动登陆开关 登陆按钮 3.退出注销 4.增删改查 5.恢复数据(取消修改)   这个代码 ...

  3. [iOS基础控件 - 6.9] 聊天界面Demo

    A.需求 做出一个类似于QQ.微信的聊天界面 1.每个cell包含发送时间.发送人(头像).发送信息 2.使用对方头像放在左边,我方头像在右边 3.对方信息使用白色背景对话框,我方信息使用蓝色背景对话 ...

  4. iOS基础 - 控件属性

    一.控件的属性 1.CGRect frame 1> 表示控件的位置和尺寸(以父控件的左上角为坐标原点(0, 0)) 2> 修改这个属性,可以调整控件的位置和尺寸 2.CGPoint cen ...

  5. [iOS基础控件 - 7.0] UIWebView

    A.基本使用 1.概念 iOS内置的浏览器控件 Safari浏览器就是通过UIWebView实现的   2.用途:制作简易浏览器 (1)基本请求 创建请求 加载请求 (2)代理监听webView加载, ...

  6. [iOS基础控件 - 6.12.3] @property属性 strong weak copy

    A.概念 @property 的修饰词   strong: 强指针/强引用(iOS6及之前是retain) weak: 弱智真/弱引用(iOS6及之前是assign)   默认情况所有指针都是强指针 ...

  7. [iOS基础控件 - 6.10.2] PickerView 自定义row内容 国家选择Demo

    A.需求 1.自定义一个UIView和xib,包含国家名和国旗显示 2.学习row的重用   B.实现步骤 1.准备plist文件和国旗图片     2.创建模型 // // Flag.h // Co ...

  8. [iOS基础控件 - 6.6.1] 展示团购数据代码

      1.主控制器: // // ViewController.m // GroupPurchase // // Created by hellovoidworld on 14/12/3. // Cop ...

  9. [iOS基础控件 - 5.1] UIScrollView

    A.需要掌握 UIScrollView 是一个能够滚动的视图控件,可以用来展示大量内容,如手机的“设置” 1.常见属性 2.常用代理方法 3.缩放 4.UIScrollView和UIPageContr ...

随机推荐

  1. css position全解析

    1.position:static 所有的元素的默认定位都是position:static,这意味着元素没有被定位,而且在文档中出现在它应该在的位置. 2.position:relative 如果设定 ...

  2. 【重要更新】Senparc.Weixin SDK v4.3.3升级说明

    为了更好地适应微信越来越快的API更新速度和越来越多的API数量,本次Senparc.Weixin.dll v4.3.3对一些通用功能进行了深度的重构. 本次更新同时影响以下所有Senparc.Wei ...

  3. Java中MVC详解以及优缺点总结

     概念:  MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务数据.逻辑.界面显示分离的 ...

  4. PHP面向对象04_串行化

    oop04复习 2014-9-3 10:48:45 要点: --1.克隆对象 --2.__toString( ) --3. __call( ) --4.自动加载类 --5.对象串行化 1.克隆对象以及 ...

  5. Logstash为什么那么慢?—— json序列化

    今天跟峡谷金桥聊天,询问起Logstash的性能,金桥提示说Logstash中json的序列化是浪费性能的一方面.于是便有了下面的测试: 第一步,造数据 首先需要造一份数据,数据可以通过logstas ...

  6. php做登录注册页面及加载

    //SQL注入攻击 //1.过滤用户的输入 //2.使用预处理语句 //3.写代码的时候尽量避免 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1. ...

  7. Atitit 数据库事务实现原理

    Atitit 数据库事务实现原理   1.1. 自己在程序中实现事务操作. 如果只是需要事务的话,你自己给mongo操作加上事务功能就可以啦..数据库事务只不过是他自己实现了而已..如果数据库不支持事 ...

  8. 阿里云 云解析使用方法/在阿里云ESC服务器解析域名并绑定服务器IP后上传文件通过域名访问步骤教程

    第一步:登录阿里云官网,获取服务器ECS的指定公网IP地址. 1.输入阿里云官网账号进入首页,如下图: 2.点击进入"管理控制台",如下图: 3.点击"云服务器ECS&q ...

  9. poi操作excel的基本用法

    这周公司要用excel作为数据存储格式做一个文具申请的功能,感觉以前本来很简单的功能变复杂了不少,但是还是记录一下一些excel的基本用法. 写在最前面:这里只介绍一些excel的基本存储方式(读,写 ...

  10. MySQL(二) 数据库数据类型详解

    序言 今天去健身了,感觉把身体练好还是不错的,闲话不多说,把这个数据库所遇到的数据类型今天统统在这里讲清楚了,以后在看到什么数据类型,咱度应该认识,对我来说,最不熟悉的应该就是时间类型这块了.但是通过 ...