重写UIlabel的setText:方法,过滤或者拦截text设置
因为项目中很多地方都有对UIlabel的赋值,但是text.length == 0 或者为空时并没有去给默认值,导致很多界面空间是白板, 所以不想一个一个去改。希望能重写UIlabel 的setText: 方法,在一个地方修改一下就行了。
参考了:https://blog.csdn.net/jiang314/article/details/52200714
写一个ULabel的分类 因为会先走分类里面的方法。 但是这样做会导致任何UILabel处都会先走分类方法,所以要考虑清楚。
//
// UILabel+HHH.m
// ZheDieLabel
//
// Created by LiuWei on 2018/5/9.
// Copyright © 2018年 xxx. All rights reserved.
// #import "UILabel+HHH.h"
#import <objc/runtime.h> @implementation UILabel (HHH) //重写initialize
+ (void)initialize
{
// 获取到UILabel中setText对应的method
Method setText =class_getInstanceMethod([UILabel class], @selector(setText:));
Method setTextMySelf =class_getInstanceMethod([self class],@selector(setTextHooked:)); // 将目标函数的原实现绑定到setTextOriginalImplemention方法上
IMP setTextImp =method_getImplementation(setText);
class_addMethod([UILabel class], @selector(setTextOriginal:), setTextImp,method_getTypeEncoding(setText)); //然后用我们自己的函数的实现,替换目标函数对应的实现
IMP setTextMySelfImp =method_getImplementation(setTextMySelf);
class_replaceMethod([UILabel class], @selector(setText:), setTextMySelfImp,method_getTypeEncoding(setText)); } - (void)setTextHooked:(NSString *)string
{ // //在这里插入过滤算法
// string = [stringstringByReplacingOccurrencesOfString:@"
// " withString:@"\r\n"]; // do something what ever youwant
if (string.length== || string == nil) { string = @" - - "; } // invoke originalimplemention
[self performSelector:@selector(setTextOriginal:) withObject:string]; } @end
用:
///重写UIlabel的text属性
UILabel *tLab = [[UILabel alloc]initWithFrame:CGRectMake(, CGRectGetMaxY(btn.frame), , )];
tLab.text = nil;
[self.view addSubview:tLab];
重写UIlabel的setText:方法,过滤或者拦截text设置的更多相关文章
- struts2中的方法过滤拦截器
方法过滤拦截器是只过滤指定的方法,如果使用针对action 的普通的过滤器则会过滤该action内部 所有方法.如果在一个action中同时有多个作为业务逻辑控制的方法存在 的话则会过滤所有的业务逻辑 ...
- Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP
回到目录 .Net MVC之所以发展的如些之好,一个很重要原因就是它公开了一组AOP的过滤器,即使用这些过滤器可以方便的拦截controller里的action,并注入我们自己的代码逻辑,向全局的异常 ...
- 重写 button 的创建方法
重写 button 的创建方法 //sxc时时改变 // self.videoM.progress = progress; // if ([self.videoM.downloadStr isEqua ...
- 五种WordPress防止垃圾评论方法-过滤垃圾评论提高WP运行效率
WordPress貌似和垃圾评论是一对“孪生兄弟”,无论在国内还是国外的空间主机上搭建的Wordpress博客,无论Wordpress有多少流量多么低的权重,垃圾评论都会自动找上门来,假如有好几天没有 ...
- 动态代理AOP实现方法过滤
上一节实现了动态代理,接下来 有时候,我不需要在每一个方法都要记录日志,做权限验证 等等. 所有就有了这样的需求.AOP实现特定方法过滤,有选择性的来对方法实现AOP 拦截.就是本节标题所示. 举个例 ...
- Springboot 三种拦截Rest API的方法-过滤器、拦截器、切片
过滤器方式实现拦截(Filter) 通过继承Servlet的Filter类来实现拦截: @Component public class TimeFilter implements Filter { @ ...
- C# 使用代理实现方法过滤
一.为什么要进行方法过滤 一些情况下我们需要再方法调用前记录方法的调用时间和使用的参数,再调用后需要记录方法的结束时间和返回结果,当方法出现异常的时候,需要记录异常的堆栈和原因,这些都是与业务无关的代 ...
- 重写jquery的ajax方法
//首先备份下jquery的ajax方法 var _ajax=$.ajax; //重写jquery的ajax方法 $.ajax=function(opt){ //备份opt中error和success ...
- 子类可以有跟父类中同名的方法,但是会重写父类中的方法,甚至是root class中的方法
/* 子类可以重写父类中的方法,甚至是root class中的方法,比如NSObeject 的new方法,但是后提示警告如下 Method is expected to return an insta ...
随机推荐
- Flannel - 配置
原文地址 flannel 从 ETCD 中读取配置. 默认情况下,flannel 从 /coreos.com/network/config 中读取配置,可以使用 --etcd-prefix 覆盖. 通 ...
- php脚本超时时间设置
设置PHP脚本执行超时的时间有下面这样一些方法:php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中的 max_execution_time 变量指定,倘若你有一个需要颇多时间 ...
- 进程池Pool的简单使用,同步异步的区别
#进程池 """ 当需要创建子进程数量不多的时候,可以直接利用multiprocessing 中的Process动态生成多个进程,但是如果上百甚至上千个任务, " ...
- vsCode python的函数跳转功能失效修复
经常遇到VsCode失效的问题,很有可能是插件的原因. 关闭插件提示功能 "python.pythonPath": "/usr/bin/python", 关闭所 ...
- Windows禅道环境部署
1. 禅道下载地址,下载解压 http://www.zentao.net/download/80081.html 一键安装包根据本机系统做相应版本下载 2. 解压完打开文件夹xampp ...
- Ubuntu12.04下安装Subversion并进行配置
Ubuntu下安装Subversion还是很简单的,只要输入sudo apt-get install Subversion就可以安装了. 主要的难点在于对权限的配置上. 安装完subversion后, ...
- [CF453C] Little Poney and Summer Sun Celebration (思维)
[CF453C] Little Poney and Summer Sun Celebration (思维) 题面 给出一张N个点M条边的无向图,有些点要求经过奇数次,有些点要求经过偶数次,要求寻找一条 ...
- NOI Day1T1归程(Kruskal重构树+Dijkstra)
NOI Day1T1归程(Kruskal重构树+Dijkstra) 题目 洛谷题目传送门 题解 其实我不想写......,所以...... 挖个坑......我以后一定会补的 luogu的题解讲的还是 ...
- Kernel Page Global Directory (PGD) of Page table of Process created in Linux Kernel
Kernel Page Global Directory (PGD) of User process created 在早期版本: 在fork一个进程的时候,必须建立进程自己的内核页目录项(内核页目录 ...
- CodeChef Sereja and GCD
Sereja and GCD Problem code: SEAGCD Submit All Submissions All submissions for this problem ar ...