UIScrollView默认已经实现了处理方法和缩小收拾。
其支持如下三个控制显示区域的属性
contentSize;该属性是一个CGSize类型的数值,CGSize并不是一个类,是一个结构体,包含width、height两个成员变量,用以表示该UIScrollView所需要显示内容的完整宽度和完整高度。
contentInset:该属性是一个UIEdgeInsets类型数值,不是一个类,是一个结构体,包含top/left/bottom/right四个成员变量,分别代表UIScrollView所需要显示内容在上左下右的留白。
contentOffset:该属性是一个CGPoint类型的数值,是一个结构体,包含x/y两个成员变量,用以表示该UIScrollView的可视区域在显示内容上滚动的距离。
UIScrollView的属性
Scroll Indicators和Scolling
包含5个可选的复选框:如下
shows horizontal indicator-----水平滚动时显示水平滚动条
shows vertical indicator--垂直滚动时显示垂直滚动条
scrolling enabled----是否可以滚动
paging enabled---勾选后系统会自动设置分页,滚动时只能按页滚动,不能滚动到任意位置
direction lock enabled--勾选后用户只能在单一方向上滚动(第一次在某个方向方向上滑动则以后只能在该方向上滑动),不勾选可以任意方向滑动。
Bounce
bounces:如果勾选,可以滑动到超出边界,然后弹回;否则只能滑动到边界
bounce horizontally:水平方向上可以超出
bounce vertically:垂直方向上可以超出
Zoom
min:最小缩放比例
max;最大缩放比例
Touch
bounces zoom:缩放时是否可以超出内容边界,类似于弹性的效果
delays content touches:延迟到确定用户真正希望滚动时才去执行滚动。否则当用户触碰后,滚动立即执行。
cacellable content touches:勾选后,在该控件的内容已经跟踪用户手指触碰动作的情况下,切用户拖动手指足以启动一个滚动时间,该控件将会调用touchesCancelled:withEvent方法,并将该手指拖动事件当做滚动该控件。若果没有勾选该选项,只要改控件的内容已经跟踪用户手指触碰动作,就不会再理会手指在该控件上的其他动作
使用委托对象处理UITextview事件
UITextView没有继承UIControl基类,所以不支持Touch Down、Touch Inside等事件。所以对于UITextView事件的处理需要使用委托对象处理,该委托对象必须实现UITextViewDelegate协议,该协议具有如下方法:
textViewShouldBeginEditing--用户将要开始编辑会触发该方法
textViewDidBeginEditing---用户开始编辑时会触发该方法
textViewShouldEndEditing--用户将要结束编辑
textViewDidEndEditing--用户结束编辑
textView:shouldChangeTextInRange:replacementText-----该UITextView中指定范围内的文本内容将要被替换时触发该方法
textViewDidChange------文本发生变化时
textViewDidChangeSelection--当用户选中该控件内某些文本时触发
对于可编辑的UITextview控件,当用户开始编辑时,会打开一个虚拟键盘,但是他会占满整个屏幕,而且该控件允许return表示换行,对于虚拟键盘的关闭有如下两种方法,一种是在程序界面添加导航栏,通过点击导航栏关闭虚拟键盘,二是通过自定义虚拟键盘附件来关闭虚拟键。
关于第一种:将YITextview的委托对象定义为ViewController本身,在内部实现UITextViewDelegate协议。
@implementation ViewController{
UIBarButtonItem* _done;
UINavigationItem* _navItem;
}
-(void)viewDidLoad{
[super viewDidLoad];
self.textView.delegate=self;=============实现协议
UINavigationBar* navBar=[[UINavigationBar alloc] intWithFrame:CGRectMake(0,20,[UIScreen mainScreen].bounds.size.width,44)];----创建并添加导航条
[self.view addSunview:navBar];
_navItem=[[UINavigationItem alloc] initWithTitle:@"导航条"];-------新疆导航项,设置标题
navBar.items=@[_navItem];----将导航项添加到导航条
_done=[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(finishEdit)];---创建一个UIBarButtonItem对象,并赋值给_done成员变量。
}
-(void)textViewDidEndEditing:(UITextview*)textview{
_navItem.rightBarButtonItem=_done;
}
-(void)textViewDidEndEditing:(UITextView*)textview{
_navItem.rightBarButtonItem=nil;
}
-(void)finishEdit{
[self.textView reignFirstResponder];
}
@end
关于第二种,自定义键盘附件关闭虚拟键盘
实例如下:
@implemetation ViewController
-(void)viewDidLoad{
[super viewDidLoad];
UIToolbar* topView=[[UIToolbar alloc]initWithFrame:CGRectMake(0,0,[UIScreen mainScreen].bounds.size.width,30];------创建一个UIToolBar工具条
[topView setBarStytle:UiBarStyleDefault];---------------设置工具条风格
UIBarButtonItem* myBn=[[UIBarButtonItem alloc]initWithTitle:@""stytle:UIBarButtonItemStytlePlain target:self action:@selector(editFinish);
NSArray* buttonArray=@[myBn];
topView.items=buttonArray;
self.textView.inputAccessoryView=topView;
}
-(void)editFinish{
[self.textview resignFirstResponder];
}
@end
自定义选择内容后的菜单
选中某些内容后显示菜单
-(void)viewDIdLoad{
[super viewDidLoad];
UIMenuItem *mailShare=[[UIMenuItem alloc] initWithTitle:@"邮件分享"action:@selector(mailShare)];
UIMenuItem*weiboShare=[[UImenuItem alloc]initWithTitle:@"微博分享"action:@selector(weiboShare)];
UIMenuController* menu=[UIMenuController sharedMenuController];
menu.menuItems=@[mainShare,weoboShare];
}
重写UIResponder的canPerformAction:withSender方法,当该方法返回yes时界面就会想显示该Action对应的控件
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{
if(action==@selector(mailShare:)||action==@selector(weiboShare)){
if(self.textView.selectedRange.length>0)
return yes;
}
return no;
}
-(void) mailShare:(id) sender{};
-(void)weiboShare(id)sender{}
@end