UIScrollView与UITextview

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

你可能感兴趣的:(UIScrollView与UITextview)