多行文本控件(UITextView)继承了UIScrollView:UIView,默认带有滚动条。
UIScrollView代表一个可滚动的控件,该控件允许用户拖动手指来滚动该控件中的内容。UIScrollView默认已经实现并处理放大或缩小手势。
三个控制显示区域的属性:
contentSize
CGSize,结构体,包含width、height,代表UIScrollView所需要显示内容的完整宽度和高度contentInset
UIEdgeInserts,包含top/left/bottom/right,分别代表UIScrollView所需要显示内容上、左、下、右的留白。contentOffset
CGPoint,包含x/y,代表UIScrollView的可视区域在显示内容上滚动的距离。其他属性:
UITextView没有集成UIControl基类,因此并不支持IBAction事件处理方式。
UITextView控制的事件交给委托对象处理,UITextView委托对象必须事件UITextViewDelegate协议。
该下雨定义了如下方法:
-textViewShouldBeginEditing:
将要开始编辑内容时触发-textViewDidBeginEditing
开始编辑时触发-textViewShouldEndEditing:
将要结束时触发-textViewDidEndEditing:
用户结束编辑时触发-textView:shouldChangeTextInRange:replacementText:
UITextView指定范围内的文本内容被替换时触发-textViewDidChange:
UITextView包含的文本内容发生改变时触发-textViewDidChangeSelect:
用户选中控件内的某些文本时触发效果图:
UIBarButtonItem* done;UINavigationItem* navItem;- (void)viewDidLoad { [super viewDidLoad]; //将该控制本身设置为TextView控件的委托对象 self.textView1.delegate = self; //创建并添加导航条 UINavigationBar * navBar = [[UINavigationBar alloc] initWithFrame: CGRectMake(0, 20, 380, 44)]; [self.view addSubview:navBar]; navItem= [[UINavigationItem alloc] initWithTitle:@"导航条"] ; [navBar pushNavigationItem:navItem animated:YES]; navBar.items = [NSArray arrayWithObject:navItem]; done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(finishEdit)]; }-(void)finishEdit{ [self.textView1 resignFirstResponder];}-(void) textViewDidBeginEditing:(UITextView *)textView{ navItem.rightBarButtonItem = done;}-(void) textViewDidEndEditing:(UITextView *)textView{ navItem.rightBarButtonItem = nil;}
效果图:
实现代码:
-(void) viewDidLoad{ [super viewDidLoad]; //创建一个UIToolBar工具条 UIToolbar* topView = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 380, 30)]; //设置工具条风格 [topView setBarStyle:UIBarStyleDefault]; //为工具田创建一个“按钮” UIBarButtonItem * myBn = [[UIBarButtonItem alloc] initWithTitle:@"无工作" style:UIBarButtonItemStylePlain target:self action:nil]; //创建第一个“按钮”,是一片可伸缩的空白区 UIBarButtonItem * spaceBn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; //创建第三个按钮,单机该按钮会触发editFinish方法 UIBarButtonItem * donBn = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(editFinish)]; NSArray * buttonsArray = [NSArray arrayWithObjects:myBn,spaceBn,donBn,nil]; //为UIToolBar设置按钮 [topView setItems:buttonsArray]; //为textView 管理的虚拟键盘设置附件 [self.textView setInputaccessoryView:topView];}-(void) didReceiveMemoryWarning{ [super didReceiveMemoryWarning];}
效果图
主要代码:
在ViewController的实现类的viewDidLoad
中
//创建两个菜单项 UIMenuItem * mailShare = [[UIMenuItem alloc] initWithTitle:@"邮件分享" action:@selector(mailShare:)]; UIMenuItem* weiboShare = [[UIMenuItem alloc] initWithTitle:@"微博分享" action:@selector(weiboShare:)]; //创建UIMenuController控制器 UIMenuController* menu = [UIMenuController sharedMenuController]; [menu setMenuItems:[NSArray arrayWithObjects:mailShare,weiboShare,nil]];
在ViewController的实现类重写canPerformAction
方法:
//重写UIResponder的canPerformAction:withSender:方法//当该方法返回YES时,该界面将会显示该Action对应的空间-(BOOL) canPerformAction:(SEL)action withSender:(id)sender{ if(action == @selector(mailShare:) || action == @selector(weiboShare:)) { //如果textView选中的内容长度大于0,返回yes, //当该方法返回YES,该Action对应的控件将会显示出来 if(self.textView.selectedRange.length > 0) { return YES; } } return NO;}
新闻热点
疑难解答