UITextView (转)

1.创建并初始化

创建UITextView的文件,并在.h文件中写入如下代码:

#import <UIKit/UIKit.h>
 
 @interface TextViewController : UIViewController <UITextViewDelegate>{
       UITextView *textView;
 }
 
 @property (nonatomic, retain) UITextView *textView; 
 
 @end

在.m文件中初始化这个textview,写入代码如下:

self.textView = [[[UITextView  alloc] initWithFrame:self.view.frame] autorelease]; //初始化大小并自动释放
 
 self.textView.textColor = [UIColor blackColor];//设置textview里面的字体颜色  
 
 self.textView.font = [UIFont fontWithName:@"Arial" size:18.0];//设置字体名字和字体大小  
 
 self.textView.delegate = self;//设置它的委托方法  
 
 self.textView.backgroundColor = [UIColor whiteColor];//设置它的背景颜色
 
 self.textView.text = @"Now is the time for all good developers to come to serve their country.\n\nNow is the time for all good developers to come to serve their country.";//设置它显示的内容  
 
 self.textView.returnKeyType = UIReturnKeyDefault;//返回键的类型  
 
 self.textView.keyboardType = UIKeyboardTypeDefault;//键盘类型  
 
 self.textView.scrollEnabled = YES;//是否可以拖动   

 self.textView.autoresizingMask = UIViewAutoresizingFlexibleHeight;//自适应高度
 
 [self.view addSubview: self.textView];//加入到整个页面中


文本字段实现了UITextInputTrait协议,其提供了7个属性来定义字段处理文本输入的方式:autocapitalizationType、 autocorrectionType、enablesReturnKeyAutomatically、keyboardAppearance、 keyboardType、returnKeyType、secureTextEntry。
其它,当文本字段为空时,placeholder文本以浅灰色显示,提供一个用户提示。通过设置clearButtonMode可以指定是否以及何时显示清除按钮。


2. UITextView退出键盘的几种方式
(1)如果你程序是有导航条的,可以在导航条上面加多一个Done的按钮,用来退出键盘,当然要先实现UITextViewDelegate。

- (void)textViewDidBeginEditing:(UITextView *)textView {    
 UIBarButtonItem *done =    [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(leaveEditMode)] autorelease];     self.navigationItem.rightBarButtonItem = done;        
}    
- (void)textViewDidEndEditing:(UITextView *)textView {    
   self.navigationItem.rightBarButtonItem = nil;  

- (void)leaveEditMode {
  [self.textView resignFirstResponder];   
}

(2)如果你的textview里不用回车键,可以把回车键当做退出键盘的响应键。

#pragma mark - UITextView Delegate Methods     
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{    
  if ([text isEqualToString:@"\n"]) {    
      [textView resignFirstResponder];    
      return NO;    
   }
  return YES;    
}

(3)还有你也可以自定义其他视图控件加载到键盘上用来退出,比如在弹出的键盘上面加一个view来放置退出键盘的Done按钮。

UIToolbar * topView = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 30)];  
     [topView setBarStyle:UIBarStyleBlack];  
     UIBarButtonItem * helloButton = [[UIBarButtonItem alloc]initWithTitle:@"Hello" style:UIBarButtonItemStyleBordered target:self action:nil];        
     UIBarButtonItem * btnSpace = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];  
     UIBarButtonItem * doneButton = [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(dismissKeyBoard)];  
     NSArray * buttonsArray = [NSArray arrayWithObjects:helloButton,btnSpace,doneButton,nil];  
     [doneButton release];  
     [btnSpace release];  
     [helloButton release];  
     [topView setItems:buttonsArray];  
     [tvTextView setInputAccessoryView:topView];  
 -(IBAction)dismissKeyBoard  
 {  
     [tvTextView resignFirstResponder];  
 }

(4)设置UITextView圆角问题

先引入#import <QuartzCore/QuartzCore.h>

_textView.layer.cornerRadius = 8; //给图层的边框设置为圆角 _textView.layer.masksToBounds = YES;


给TextView加一个有色边框,并设置背景图片
//给图层添加一个有色边框
 _textView.layer.borderWidth = 5;
 _textView.layer.borderColor = [[UIColor colorWithRed:0.52 green:0.09 blue:0.07 alpha:0.5] CGColor];
 _textView.layer.contents = (id)[UIImage imageNamed:@"31"].CGImage; //给图层添加背景图片


(5)UITextView根据文本大小自适应高度

通过实现文本字数来确定高度,如下:

NSString * desc = @"Description it is  a test font, and don't become angry for which i use to do here.Now here is a very nice party from american or not!";    
CGSize  size = [desc sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(240, 2000) lineBreakMode:UILineBreakModeWordWrap];

只有UILabel需要定义的numberoflines为0,即不做行数的限制。如下: 
[label  setNumberOfLines:0];   
[label  setFrame:CGRectMake(40, 135, 240, size.height+10)];   
[label setText:desc];  

(6)UITextView自定选择文字后的菜单
在ViewDidLoad中加入:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self._textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 100, 300, 200)];//初始化
    _textView.font = [UIFont fontWithName:@"Arial" size:33];//设置字体名字和字体大小
    [self.view addSubview:_textView];
    
    UIMenuItem *menuItem = [[UIMenuItem alloc]initWithTitle:@"分享到新浪微博" action:@selector(changeColor)]; 
    UIMenuController *menu = [UIMenuController sharedMenuController]; 
    [menu setMenuItems:[NSArray arrayWithObject:menuItem]]; 
    [menuItem release]; 
}

当然上面那个@selector里面的changeColor方法还是自己写吧,也就是说点击了我们自定义的菜单项后会触发的方法。
然后还得在代码里加上一个方法:

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender 

    if(action ==@selector(changeColor) || action == @selector(copy:)) 
    { 
        if(_textView.selectedRange.length>0) 
            return YES; 
    } 
    return NO; 

-(void)changeColor
{
    NSLog(@"%@",[_textView.text substringWithRange:_textView.selectedRange]);
}

实现后如下图:


获得行数(包括换行符也会计算在内):
CGSize size = [[self.TextView text] sizeWithFont:[self.TextView font]];   
   // 2. 取出文字的高度
    int length = size.height;   
    //3. 计算行数
    int colomNumber = TextView.contentSize.height/length;

posted @ 2014-04-28 13:43  Awesome赛  阅读(234)  评论(0编辑  收藏  举报