iOS中的UITextView文字输入光标使用技巧小结

1.创建并初始化

 @property (nonatomic, strong) UITextView *textView; 

// 创建
self.textView = [[UITextView alloc] initWithFrame:self.view.frame]; 

// 设置textview里面的字体颜色
 self.textView.textColor = [UIColor blackColor];
// 设置字体名字和字体大小
 self.textView.font = [UIFont fontWithName:@"Arial" size:18.0];
// 设置代理
 self.textView.delegate = self;
// 设置它的背景颜色
 self.textView.backgroundColor = [UIColor whiteColor];
 self.textView.text = @“hehe”;
// 返回键的类型
 self.textView.returnKeyType = UIReturnKeyDefault;
// 键盘类型
 self.textView.keyboardType = UIKeyboardTypeDefault; 

// 是否可以拖动
self.textView.scrollEnabled = YES;

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

- (void)textViewDidBeginEditing:(UITextView *)textView {  

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(getOverEditing)];  

}
- (void)textViewDidEndEditing:(UITextView *)textView {
  self.navigationItem.rightBarButtonItem = nil;
}
- (void)getOverEditing{
 [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)];
   UIBarButtonItem * cancelButton= [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(dismissKeyBoard)];
   NSArray * buttonsArray = @[cancelButton];
   [topView setItems:buttonsArray];
   [self.textView setInputAccessoryView:topView];
 -(void)dismissKeyBoard
 {
   [tvTextView resignFirstResponder];
 }

3.UITextView自定选择文字后的菜单

在ViewDidLoad中加入:

- (void)viewDidLoad
{
  [super viewDidLoad];
  self._textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 100, 300, 200)];
  [self.view addSubview:_textView];
  UIMenuItem *menuItem = [[UIMenuItem alloc]initWithTitle:@“我是自定义的菜单" action:@selector(didClickCustomMenuAction)];
  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)didClickCustomMenuAction
{
  NSLog(@"%@“,__function__);
}

4.设置UITextView内边距
当我们因为一些需求将UITextView当成UILabel使用(为了使用UITextView自带的复制,粘贴,选择功能),这时我们只需要禁用UITextView的几个属性就行了

textView.editable = NO;//不可编辑
textView.scrollEnabled = NO;//不可滚动
textView.editable = NO;//不可编辑
textView.scrollEnabled = NO;//不可滚动

这样就ok;
但是当我们在实际运用时,想计算文字的大小并设置UITextView的显示大小

UIFont *font = [UIFont systemFontOfSize:14.0f]; //指定字符串的大小 

[textView setText:content]; 

CGSize textSize = [content sizeWithFont:font constrainedToSize:CGSizeMake(200, 2000) lineBreakMode:UILineBreakModeCharacterWrap]; 

CGRect articleframe = [articleLabel frame];
textView.size.height = textSize.height ;
 textView.size.width = textSize.width;
[textView setFrame:articleframe];
UIFont *font = [UIFont systemFontOfSize:14.0f]; //指定字符串的大小 

[textView setText:content]; 

CGSize textSize = [content sizeWithFont:font constrainedToSize:CGSizeMake(200, 2000) lineBreakMode:UILineBreakModeCharacterWrap]; 

CGRect articleframe = [articleLabel frame];
textView.size.height = textSize.height ;
 textView.size.width = textSize.width;
[textView setFrame:articleframe];

但是通过这种方法在UILabel上使用没有任何问题,但是在UITextView是却不行,文字总是显示不全,不管你主动写多了高度给它,当文字不一样了双会显示不全或显示高度过多;
可以用下面的方法试一下

[self.articleLabel setContentInset:UIEdgeInsetsMake(-10, -5, -15, -5)];//设置UITextView的内边距
[self.articleLabel setTextAlignment:NSTextAlignmentLeft];//并设置左对齐
[self.articleLabel setContentInset:UIEdgeInsetsMake(-10, -5, -15, -5)];//设置UITextView的内边距
[self.articleLabel setTextAlignment:NSTextAlignmentLeft];//并设置左对齐
(0)

相关推荐

  • iOS UITextView 首行缩进 撤销输入 反撤销输入的实现代码

    最近公司涉及到作家助手的功能,能撤销输入的文字,并能反撤销被撤销掉的文字. 该功能类似ios系统的摇一摇撤销输入. 当时也特迷茫,不知道从何下手,后来搜索了大量的资料,终于完成了这个功能,现在就将该功能的实现写出来,共勉. 这个功能涉及到ios原生类:NSUndomanager.这个类挺强大.废话不多说,直接上代码. #import "ViewController.h" @interface ViewController ()<UITextViewDelegate>{ UI

  • iOS开发中Swift3 监听UITextView文字改变的方法(三种方法)

    在项目中使用文本输入框出UITextField之外还会经常使用 UITextView ,难免会有需求监听UITextView文本框内文本数量.下面介绍在swift3中两种常用方式 方式一: 全局通知 1.注册通知 在合适位置注册监听UITextView文本变化的全局通知 //UITextView 监听开始输入的两种方法 //方法一:通知 NotificationCenter.default.addObserver(self, selector: #selector(ComposeVC.textV

  • IOS 开发UITextView回收或关闭键盘

    IOS 开发UITextView回收或关闭键盘 iOS开发中,发现UITextView没有像UITextField中textFieldShouldReturn:这样的方法,那么要实现UITextView关闭键盘,就必须使用其他的方法,下面是可以使用的几种方法. 1.如果你程序是有导航条的,可以在导航条上面加多一个Done的按钮,用来退出键盘,当然要先实UITextViewDelegate. - (void)textViewDidBeginEditing:(UITextView *)textVie

  • IOS 中UITextField,UITextView,UILabel 根据内容来计算高度

    IOS 中UITextField,UITextView,UILabel 根据内容来计算高度 在开发的过程中,常常遇到根据内容来决定控件的高度的情况,常见的就是UITextField,UITextView,UILabel这三个控件,下面一UITextView 为例来说明一下: 首先新新建一个textView. 设施text,font UITextView *textView = [[UITextView alloc] init]; textView.text = @"2015-01-19 14:0

  • IOS 中UITextField和UITextView中字符串为空和空格的解决办法

    IOS 中UITextField和UITextView中字符串为空和空格的解决办法 在用UITextField,UITextView声明的属性写一些页面的时候,经常会出现这样的小bug,就是给空值或空格也能进行传值或存储,这里给一些解决的小方法: eg: 这里声明了一个属性,就以此为例来说 @property (nonatomic, strong) UITextField *titlefield; 为空时: if(_titlefield.text == nil){ //执行一些警告操作 } if

  • iOS应用开发中的文字选中操作控件UITextView用法讲解

    1.创建并初始化 创建UITextView的文件,并在.h文件中写入如下代码: 复制代码 代码如下: #import <UIKit/UIKit.h>        @interface TextViewController : UIViewController <UITextViewDelegate>    {                  UITextView *textView;    }        @property (nonatomic, retain) UITex

  • iOS UITextField、UITextView只限输入中文、英文、数字及实时限制字符个数的封装实现代码

    引言需求:(输入框限制输入多少字符) 1.一个字母.符号.数字相当于一个字符 2.一个汉字相当于两个字符 3.不能输入特殊字符 4.不能输入emoji表情 直接上代码 一.注册通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldChange:) name:UITextFieldTextDidChangeNotification object:nil]; [[NSNotifica

  • iOS中的UITextView文字输入光标使用技巧小结

    1.创建并初始化 @property (nonatomic, strong) UITextView *textView; // 创建 self.textView = [[UITextView alloc] initWithFrame:self.view.frame]; // 设置textview里面的字体颜色 self.textView.textColor = [UIColor blackColor]; // 设置字体名字和字体大小 self.textView.font = [UIFont fo

  • Android编程中EditText限制文字输入的方法

    本文实例讲述了Android编程中EditText限制文字输入的方法.分享给大家供大家参考,具体如下: Android的编辑框控件EditText在平常编程时会经常用到,有时候会对编辑框增加某些限制,如限制只能输入数字,最大输入的文字个数,不能输入一些非法字符等,这些需求有些可以使用android控件属性直接写在布局xml文件里,比如android:numeric="integer"(只允许输入数字): 对于一些需求,如非法字符限制(例如不允许输入#号,如果输入了#给出错误提示),做成

  • IOS中一段文字设置多种字体颜色代码

    给定range和需要设置的颜色,就可以给一段文字设置多种不同的字体颜色,使用方法如下: 复制代码 代码如下: [self fuwenbenLabel:contentLabel FontNumber:[UIFont systemFontOfSize:15] AndRange:NSMakeRange(6, 1) AndColor:RGBACOLOR(34, 150, 253, 1)]; 复制代码 代码如下: //设置不同字体颜色 -(void)fuwenbenLabel:(UILabel *)lab

  • iOS开发中使用UILabel设置字体的相关技巧小结

    一.初始化 复制代码 代码如下: UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 120, 44)];      [self.view addSubview:myLabel]; 二.设置文字 1.设置默认文本 复制代码 代码如下: NSString *text = @"标签文本"; myLabel.text = text; 效果: 2.设置标签文本(此属性是iOS6.0之后才出现,如若不是必要,不

  • iOS中tableView cell分割线的一些设置技巧

    前言 对于iOS的tableView的cell的分割线,一般我们很少使用不是系统默认的,但是有些项目要求还是要求我们去改变分割线的颜色或者外形以配合整个项目的色调.这个苹果公司早都为我们想到了. 一.关于分割线的位置. 分割线的位置就是指分割线相对于tableViewCell.如果我们要根据要求调节其位置,那么在iOS7.0版本以后,提供了一个方法如下: if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)])

  • IOS中UITextView或UITextField字数限制的实现

    IOS中UITextView或UITextField字数限制的实现 UITextView或UITextField字数限制,输入时的限制,复制粘贴时的限制 字数限制有三种方法 在代理方法 "- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string" 或 "- (BOOL)textView:

  • iOS中searchBar(搜索框)光标初始位置后移

    废话不多说了,直接给大家贴关键代码了,具体代码如下所示: #import <UIKit/UIKit.h> @interface SearchBar : UITextField @property (nonatomic,strong) UIButton *button; + (instancetype)searchBar; @end #import "SearchBar.h" @implementation SearchBar - (id)initWithFrame:(CGR

随机推荐