xml地图|网站地图|网站标签 [设为首页] [加入收藏]

点击对应文字响应事件的Label,总有一个适合你的

来源:http://www.ccidsi.com 作者:最新解决方案 人气:99 发布时间:2020-05-04
摘要:多年来在做社交成效, 境遇二个坎, 点击相应的文字响应事件, 就疑似博客园里这种,有@哪个人的 这一个前边就会点击跳到某某一个人的主页, 要是只是在头里,像和讯中的话题, 带#号的

多年来在做社交成效, 境遇二个坎, 点击相应的文字响应事件, 就疑似博客园里这种, 有@哪个人的 这一个前边就会点击跳到某某一个人的主页, 要是只是在头里, 像和讯中的话题, 带#号的, 并且也十分长, 这一个倒是好解决, 一上马想到UITextView的超链接, 但是UITextView在XIB里又不能依据文字的微微而变大小, 笔者的主张是用label, 可是label怎么获取点击的节制, 这是珍视, 当然, 假若只是像前边带#话题#这种, 在一直不那么些在此以前, 作者的驱除办法是, 在此个label上再加贰个label用于彰显#话题#,上边包车型地铁label将那些字拼接在前头, 用属性字符串将那多少个字颜色搞成透亮的, 只监听上边这几个label的点击手势就可以, 可是漫漫思考, 那样不是长久之计, 倘使非常短, 换行了, 那就糟糕办了, 只好硬着头皮上了......

** 时隔半个月,终于来更新第二篇了,大家有木有很愿意! **

开荒app,要把数据展现在首页上,就要把参数封装到模型里面去,变为辞典,再通过工具类里面的相关操作,造成词典给AFN当参数上传。AFN把央浼下来的NSData二进制调换为JSON数据,也正是词典,

先看下效果图吧

1、效果:

功能一、让系统TextView自带placeholder属性

图片 1image

效益二、自动修改中度,相像闲谈输入框

图片 2image

功用三、援助输入图片

图片 3image

父亲和儿子调控器
事情未发生前的做法是用strong七个调整器,各自早先化后,点击按键跳转,並且remove别的调控器。今后换叁个做法,【self addchild。。。】,也是强指针。就能够加多到五个数组中,只要self在,调整器就在。不管咋做都要设置table的contenSize,还把全部内容都来得出来。再从数组中收取调控器。
cell的可观调大,在显示clearcolor,那样就有距离了。
嘲笑内部发表自个儿的事物是 新建多少个viewController,但是有导航栏,所以是一个nagationControl的rootViewCon为新建的调整器。然则项目里面那个是push的三个调整器,不用那样弄了。
想要让一行label展现不等同的书体和颜料,用NS

图片 4可点击的label

2、使用方式:

将UITextView WZB.h和UITextView WZB.m拖入工程

只供给在供给采取的地点直接导入头文件UITextView WZB.h,你的UITextView就颇有了那三大听从

// 直接设置placeholder属性即可 textView.placeholder = @"i love you"; [self.view addSubview:textView]; 

图片 5image

比如想要总计中度,只须要调用那个主意就可以,你要求在block回调里手动改善textView的可观

/* 自动高度的方法,maxHeight:最大高度, textHeightDidChanged:高度改变的时候调用 */- autoHeightWithMaxHeight:maxHeight textViewHeightDidChanged:(textViewHeightDidChangedBlock)textViewHeightDidChanged;

如图

图片 6image

插入图片的章程如下:

/* 添加一张图片 image:要添加的图片 */- addImage:(UIImage *)image;/* 添加一张图片 image:要添加的图片 size:图片大小 */- addImage:(UIImage *)image size:size;/* 插入一张图片 image:要添加的图片 size:图片大小 index:插入的位置 */- insertImage:(UIImage *)image size:size index:(NSInteger)index;/* 添加一张图片 image:要添加的图片 multiple:放大/缩小的倍数 */- addImage:(UIImage *)image multiple:multiple;/* 插入一张图片 image:要添加的图片 multiple:放大/缩小的倍数 index:插入的位置 */- insertImage:(UIImage *)image multiple:multiple index:(NSInteger)index;

证明写的很明白,效果如下:

图片 7image

键盘

包装了二个view ControllerToolBar

公布戏弄里面是UITextView,可是未有plach那些天性,怎么弄手艺显示出文字效果,在等大家输入文字后半途而返,並且为啥textView直接在x=64之处,开关就是在0 0的岗位。textView世襲自scrollView,里面有contentInsize的top默以为64,大家要负有它,在打字与印刷就意识是64.scrollView面有特本性是automatiocallyAdjustScrollViewInset的bool值,暗中同意是yes。当scrollView碰到Nav,UITab等空间,会私下认可设置scrollVIew的contentInset。
uitextField
文字恒久一行,不能够多行。
有placehoder属性设置站位文字
继承自UIcontrol
监听行为:设置代理;addTarget;通告:UITextFieldTextDidChangeNotification.
UITextView
能呈现任性文字,不可能设置站位文字。世襲UIScrol,监听行为设置代理;通告。
自定义四个UITextView,里面安装八个属性copy 字符串placehoder,和strong Uicolor文字颜色的。
多样措施达成,一种是label一种是drawRect。在draw方法中,用词典加NSFontAttribute设置字体大小,画文字的章程是drawInRect。。withAtt 。 而要监听文字的话不要安装delegate,设计角度看代理是让别人监听,而且外面假设再有一个delegate的话会覆盖。
如此这般就用通告,NotificationCenter addOberserver方法。在此边的selector方法中调用 【self setNeedsDisplay】会调用drawRect方法,在里头剖断self.hasText有未有值。
有多少个bug,在外场改属性倒霉使,要在自定义里面从写属性的set方法,从写setNeedsDisplay。有setFont;setText等措施从写。之后正是在里边发送网络央求,依据参数发布文书字。

安装键盘的话是在调节器中筛选self.textView.inputView属性而self.textView.inputAccessoryView是安装突显在键盘顶上部分的从头到尾的经过。自定义一个工具条世襲UIView,在类里写一个开立开关的法子。要想设置开关之处,在layoutSubviews方法里面,显示工具条没看完。

那些项目里有所三个自定义的键盘顶上部分内容;有个法子是产生第一响应者,能输入文本的控件一旦产生第一响应者,就能够叫出相应的键盘,【textView becomeFirstResponder】

有八个顶端是相册和表情按键,大家想要监听他们的点击事件,开始化是在initWithFrame中。这几个事情应该是调控器做的,所以在ControllerToolBar中装置了代办,通过艺术来完结开关的点击,有三个weak类型的坚决守住协议的天性。左券里面是的参数是工具类对象和目录,然后再当前调控器中去设置代理,正是控件告诉调整器,然后调节器去做。这样就在调整器中贯彻的左券形式中去完结效果与利益;此中二个是UIImagePickerController,有个壹本性情是是sourceYype,能够筛选是单反或然相册,加三个判定若是或不是想张开的就return,还要贯彻那个类的一个共谋情势,imagepicker... didFinsh方法,在形式里面达成dismiss方法,并且有二个参数是info能得到相册里面包车型地铁图纸。有八个措施能达成吧image写入到相册里面正是UIImageWriteToSaved..;assisLibabry什么库能达成图片图片器。

三回九转一个UIView的神情类,是一个scrollView,还应该有二个pageControl正是表情键盘。想切换键盘的话在按键的兑现情势中switchkeybord中用if决断,是想明白今后是哪二个键盘,是系统可能自定义,切换就看inputVIew这本性情是或不是nil。是的话弹系统自带的,要不就是self.textView.inputView= 表情键盘;系统自带键盘的惊人是216.
想要换表情键盘就先退出的endEditing:YES,系统键盘就是举行为率先响应者。要三个动漫片效果的弹出键盘,dispatch——after()……{
【UIVIew animatewithDuration:duration animations】
【self.textVIew becomeFirstResponder】
} 先固定pageController的莫斯科大学,numberOfPages属性。scrollView里面包车型地铁按键是二个挨贰个的,为了方便计算用一个UIView加载到上面,然后计算前边多少个,pageEnable = yes。输出plist文件的多少个数,用多少算numberOfPages。
加载表情数据,就是plist文件,读取路线【NSBundle main】pathForResourse;把公文中的词典转模型,用叁个数组就存,用懒加载,用多个办法self.enmtions = [表情类型 objextArrayWithKeyValuesArray arrayWithCOntentsOfpath],可是frame的安装平常是在layoutSubView里面,可是在里边安装的话就能懒加载二回,对本人那几个从未影响。怎么样把数量加载上去,利用数组。每一页都有定位的个数,那么久切割数组里的多寡pageVIew.emotions = [emotions subrraryWithRange:] 结局数组越界的不二秘诀,NSUInter left = emotions.count -range.location;
if(left >= 每页的个数卡塔尔(قطر‎}
range.length = 每页的个数;
|else{
range.length = left;
}
在数组早先化中[btn setImageName :emotion.png],那样图片就出来了。frame设置在相册里面。在pageView里面监听点击事件,

抽出最上层window
UIWindow *window = [UIApplication shareApplication].window lastObject];
[widnow addSubiew:self.VIew];
是插入到textView,那么公约的话要有两层,那样的: 话用通告传,把表情放到字典里去,[Notification postNotificationName : Object: userInfo:]
表情选中的打招呼[Notification addObserver select name object:],那样调节器就通晓了,插入光标所在【textView insertText:emotion.chs】;单独设置一个删减 按键,参与到数组中,在for循环中给frame。要想达成删除作用,设一个通报,告诉textView,在文告的选用器的主意中落实[self.textView delteBackward];是往回删的意味。

侧拉兑现
窗口的跟调节器,有个侧边菜单,还应该有二个导航调整器的view,那样一挪就看见左侧菜单了。所以根调整器上有八个控件。点击菜单按键调换调整器
四个父调控器,别的都以小调整器。想要自动安装文字宽高,NSFontAttributeName当二个参数 [title boundingRectWithSize:];
假造了用frame来做,但是假设变小中间的控件就能拥堵了。
在手势方法中什么让调控器变小还拉动漫效用,
[UIView animatieWithDuration:2.0 animations:^{
缩放比例,叁次缩放三次往左侧挪
CGFloat scale = 300.0/[UIScreen mainScreen].bounds.size.height;
菜单侧边的间隔
CGFloat leftMenuMargin = [UIScreen main ].bounds.size.width *(1 - scrale) *0.5;

self.navigationCOntroller.view.trasfrom = CGAffineTramsforMakeScale(0.5,0.5)
}]
美食做法里的按键点击切换调节器:
先把调控器加到数组中去,数组是由各样的,那么在view创设个合同用于传递消息,当在C中达成合同时,而这里要小心下当本人把新的控制器增加都爱方面去时,旧的下边包车型大巴调控器要挪开,不是绝迹。要不移开会费用能源渲染。这样就要加多贰个参数,是事情发生前的调整器的index值。何况点击按键时不是push八个页面出来而是从压缩的特别页面再变大回来。正是把旧的transform给新的transform,何况把transform消逝,照片

两个bug
1.在把trasrom变回来之后有个难点蒙版还再上面所以要点击两下,设为属性remov
2.导航栏从64 -44 - 64 会有黑条
二个导航调整器的view第三次浮现到它的父控件上时,如若transform的缩放值被改了,上边的20莫斯中国科学技术大学学当时是不会出去的。
那样的话先出示新的view,在转移transf
不要紧关系的

大概完结了文字点击响应事件, 轻松测量试验, 应该可用

3、完结大致原理:

行使runtime为textView加多如下属性

// 占位文字static const void *WZBPlaceholderViewKey = &WZBPlaceholderViewKey;// 占位文字颜色static const void *WZBPlaceholderColorKey = &WZBPlaceholderColorKey;// 最大高度static const void *WZBTextViewMaxHeightKey = &WZBTextViewMaxHeightKey;// 高度变化的blockstatic const void *WZBTextViewHeightDidChangedBlockKey = &WZBTextViewHeightDidChangedBlockKey;// 动态添加属性的本质是: 让对象的某个属性与值产生关联objc_setAssociatedObject(self, WZBPlaceholderViewKey, placeholderView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);objc_setAssociatedObject(self, WZBTextViewMaxHeightKey, [NSString stringWithFormat:@"%lf", maxHeight], OBJC_ASSOCIATION_COPY_NONATOMIC);objc_setAssociatedObject(self, WZBTextViewHeightDidChangedBlockKey, textViewHeightDidChanged, OBJC_ASSOCIATION_COPY_NONATOMIC);objc_setAssociatedObject(self, WZBPlaceholderColorKey, placeholderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

监听

 // 监听文字改变 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewTextChange) name:UITextViewTextDidChangeNotification object:self]; // 这些属性改变时,都要作出一定的改变,尽管已经监听了TextDidChange的通知,也要监听text属性,因为通知监听不到setText: NSArray *propertys = @[@"frame", @"bounds", @"font", @"text", @"textAlignment", @"textContainerInset"]; // 监听属性 for (NSString *property in propertys) { [self addObserver:self forKeyPath:property options:NSKeyValueObservingOptionNew context:nil]; } 

当文字产生变化的时候

- textViewTextChange { self.placeholderView.hidden = (self.attributedText.length > 0 && self.attributedText); if (self.maxHeight >= self.bounds.size.height) { // 计算高度 NSInteger currentHeight = ceil([self sizeThatFits:CGSizeMake(self.bounds.size.width, MAXFLOAT)].height); NSInteger lastheight = ceil(self.maxHeight   self.textContainerInset.top   self.textContainerInset.bottom); // 如果高度有变化,调用block if (currentHeight != lastheight) { self.scrollEnabled = currentHeight >= self.maxHeight; if (self.textViewHeightDidChanged) { self.textViewHeightDidChanged((currentHeight >= self.maxHeight ? self.maxHeight : currentHeight)); } } }}

增多图片是用的NSTextAttachment

- addImage:(UIImage *)image size:size index:(NSInteger)index multiple:multiple { NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText]; NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init]; textAttachment.image = image; CGRect bounds = textAttachment.bounds; if (!CGSizeEqualToSize(size, CGSizeZero)) { bounds.size = size; textAttachment.bounds = bounds; } else if (multiple > 0.0f) { textAttachment.image = [UIImage imageWithCGImage:textAttachment.image.CGImage scale:multiple orientation:UIImageOrientationUp]; } else { CGFloat oldWidth = textAttachment.image.size.width; CGFloat scaleFactor = oldWidth / (self.frame.size.width - 10); textAttachment.image = [UIImage imageWithCGImage:textAttachment.image.CGImage scale:scaleFactor orientation:UIImageOrientationUp]; } NSAttributedString *attrStringWithImage = [NSAttributedString attributedStringWithAttachment:textAttachment]; [attributedString replaceCharactersInRange:NSMakeRange withAttributedString:attrStringWithImage]; self.attributedText = attributedString; // 记得走下这两个方法 [self textViewTextChange]; [self refreshPlaceholderView];}

最根本的困难就是在于获取特定文字的节制英特网找过demo, 不过兑现的笔触不是特意清楚, 所以笔者或然依据自个儿的思路来整

4、GitHub源码地址:UITextView-WZB
  • 设定可点击的文字
  • 获得可点击文字在控件上的rect
  • 点击的时候, 遍历控件保存的rect数组, 在哪些数组里
  • 找到相应的响应对象去响应事件
1、效果:

图片 8通常说来展现在分界面上图片 9从显示屏上边弹出图片 10做键盘显示

本文由68399皇家赌场发布于最新解决方案,转载请注明出处:点击对应文字响应事件的Label,总有一个适合你的

关键词: Label 干货 文字 自定义 控件

上一篇:常见报错的解决方法,iOS常见问题总结

下一篇:没有了

最火资讯