服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS应用开发中的文字选中操作控件UITextView用法讲解

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

2021-01-07 15:24苹果吧 IOS

这篇文章主要介绍了iOS应用开发中的文字选中操作控件UITextView用法讲解,代码基于传统的Objective-C语言,需要的朋友可以参考下

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 tocome to serve their country.\n\nnow is the time for all good developers to cometo serve their country.";//设置它显示的内容   
   
self.textview.returnkeytype = uireturnkeydefault;//返回键的类型   
   
self.textview.keyboardtype = uikeyboardtypedefault;//键盘类型   
   
self.textview.scrollenabled = yes;//是否可以拖动   
   
self.textview.autoresizingmask = uiviewautoresizingflexibleheight;//自适应高度   
 
[self.view addsubview: self.textview];//加入到整个页面中   


2. uitextview退出键盘的几种方式
因为你点击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;     
   
}   


这样无论你是使用电脑键盘上的回车键还是使用弹出键盘里的return键都可以达到退出键盘的效果。
 
(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 setcornerradius:10]; 來把 uitextview 设定圓角
 
(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中加入:

复制代码 代码如下:

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:))   
{   
if(textview.selectedrange.length>0)   
return yes;   
}   
return no;   
}  


实现后如下图:

 

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

 

3.一些个性化定制
总体来说个性化定制uitextview中的内容有两种方法:
(1)从文件中读取内容到uitextview,这个个人感觉使用rtfd和rtf格式文件效果非常好。

(2)使用nsattributestring进行定制

具体方法如下:

复制代码 代码如下:

nsmutableparagraphstyle *paragraphstyle = [[nsmutableparagraphstyle alloc]init]; 
    paragraphstyle.lineheightmultiple = 20.f; 
    paragraphstyle.maximumlineheight = 25.f; 
    paragraphstyle.minimumlineheight = 15.f; 
    paragraphstyle.firstlineheadindent = 20.f; 
paragraphstyle.alignment = nstextalignmentjustified; 
 
nsdictionary *attributes = @{ nsfontattributename:[uifont systemfontofsize:14], nsparagraphstyleattributename:paragraphstyle, nsforegroundcolorattributename:[uicolor colorwithred:76./255. green:75./255. blue:71./255. alpha:1] 
                                 }; 
 textview.attributedtext = [[nsattributedstring alloc]initwithstring:content attributes:attributes]; 

 

当然也可以初始化一个nsmutableattributedstring,然后向里面添加文字样式,最后将它赋给textview的attributedtext即可

复制代码 代码如下:

nsmutableattributedstring *atr = [[nsmutableattributedstring alloc]initwithstring:detail]; 
    [atr addattribute:nsfontattributename value:[uifont systemfontofsize:14] range:nsmakerange(0, detail.length)]; 
    textview.attributedtext = atr; 

 

另外,对于textview中的链接样式,同样也可以定制

复制代码 代码如下:

nsdictionary *linkattributes = @{nsforegroundcolorattributename: [uicolor bluecolor], 
                                     nsunderlinecolorattributename: [uicolor blackcolor], 
                                     nsunderlinestyleattributename: @(nsunderlinepatterndash)}; 
self.linktextattributes = linkattributes; 

 

这里只是个简单的例子,具体还有很多属性可以自行参考头文件

延伸 · 阅读

精彩推荐
  • IOSiOS开发技巧之状态栏字体颜色的设置方法

    iOS开发技巧之状态栏字体颜色的设置方法

    有时候我们需要根据不同的背景修改状态栏字体的颜色,下面这篇文章主要给大家介绍了关于iOS开发技巧之状态栏字体颜色的设置方法,文中通过示例代码...

    梦想家-mxj8922021-05-10
  • IOSiOS自定义UICollectionViewFlowLayout实现图片浏览效果

    iOS自定义UICollectionViewFlowLayout实现图片浏览效果

    这篇文章主要介绍了iOS自定义UICollectionViewFlowLayout实现图片浏览效果的相关资料,需要的朋友可以参考下...

    jiangamh8882021-01-11
  • IOS详解iOS中多个网络请求的同步问题总结

    详解iOS中多个网络请求的同步问题总结

    这篇文章主要介绍了详解iOS中多个网络请求的同步问题总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    liang199111302021-03-15
  • IOSiOS中MD5加密算法的介绍和使用

    iOS中MD5加密算法的介绍和使用

    MD5加密是最常用的加密方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码。对输入信息生成唯一的128位散列值(32个字符)。这篇文...

    LYSNote5432021-02-04
  • IOSiOS中滑动控制屏幕亮度和系统音量(附加AVAudioPlayer基本用法和Masonry简单使用)

    iOS中滑动控制屏幕亮度和系统音量(附加AVAudioPlayer基本用法和

    这篇文章主要介绍了iOS中滑动控制屏幕亮度和系统音量(附加AVAudioPlayer基本用法和Masonry简单使用)的相关资料,需要的朋友可以参考下...

    CodingFire13652021-02-26
  • IOSiOS中UILabel实现长按复制功能实例代码

    iOS中UILabel实现长按复制功能实例代码

    在iOS开发过程中,有时候会用到UILabel展示的内容,那么就设计到点击UILabel复制它上面展示的内容的功能,也就是Label长按复制功能,下面这篇文章主要给大...

    devilx12792021-04-02
  • IOSiOS实现控制屏幕常亮不变暗的方法示例

    iOS实现控制屏幕常亮不变暗的方法示例

    最近在工作中遇到了要将iOS屏幕保持常亮的需求,所以下面这篇文章主要给大家介绍了关于利用iOS如何实现控制屏幕常亮不变暗的方法,文中给出了详细的...

    随风13332021-04-02
  • IOSiOS开发之视图切换

    iOS开发之视图切换

    在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单。在iOS开发中常用的视图切换有三种,今天我们将...

    执着丶执念5272021-01-16