多行文本控件(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;}
新聞熱點
疑難解答