UISwitch 添加 标签

给UISwitch添加一个标签。左右滑动时候出现开关标签内容。

代码:

//
//  UISwitch+JGLabel.h
//  JGSwitch
//
//  Created by sl on 15/4/11.
//  Copyright (c) 2015年 Madordie. All rights reserved.
//
//
//  说明:
//      1.给UISwitch添加开关标签
//      2.可根据需要调整标签的相关属性
//      3.类别实现,不用更改代码即可添加
//
//
//  代码出处:http://www.cnblogs.com/madordie/
//
//  思路:
//      1.找到对应View添加两个Label
//

#import <UIKit/UIKit.h>
@interface UISwitch (JGLabel)
/**
*  设置开关标题文字
*      1.根据自己需要设置字体内容、大小、字体颜色等属性。
*      2.不建议在此设置背景颜色,如需设置,调用父类方法设置。
*      3.根据需要可手动调整Label的frame,以使你的Label更加美观。
*/
#pragma mark - 标题
- (UILabel *)onTitle;
- (UILabel *)offTitle;
@end
/**
*备注:
*      1.offTitle对齐方式默认右对齐。
*      2.onTitle默认左对齐
*      3.么有了
*/
//示例代码:
/*
//初始化属性,可IB定制
UISwitch *mySwitch = [[UISwitch alloc] init];
mySwitch.center = self.view.center;
mySwitch.transform = CGAffineTransformMakeScale(2.0f, 2.0f);
[self.view addSubview:mySwitch];
//设置标题属性(当作UILabel使用)
mySwitch.offTitle.text = @"off";
mySwitch.onTitle.text  =@"on";
*/

 

//
//  UISwitch+JGLabel.m
//  JGSwitch
//
//  Created by sl on 15/4/11.
//  Copyright (c) 2015年 Madordie. All rights reserved.
//

#import "UISwitch+JGLabel.h"
#import <objc/runtime.h>
static const void *onTitleKey = &onTitleKey;
static const void *offTitleKey = &offTitleKey;
#define JGGetOnTitle                objc_getAssociatedObject(self, onTitleKey )
#define JGGetOffTitle               objc_getAssociatedObject(self, offTitleKey)
#define JGSetOnTitle(JLabel)        objc_setAssociatedObject(self, onTitleKey,  JLabel, OBJC_ASSOCIATION_RETAIN_NONATOMIC)
#define JGSetOffTitle(JLabel)       objc_setAssociatedObject(self, offTitleKey, JLabel, OBJC_ASSOCIATION_RETAIN_NONATOMIC)
@implementation UISwitch (JGLabel)
#pragma mark - getter
- (UILabel *)onTitle {
UILabel *_onTitle = JGGetOnTitle;
if (_onTitle) {
return _onTitle;
}
_onTitle = [self JGMakeLabel];
[self.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
UIView *view = obj;
if ([view isKindOfClass:NSClassFromString(@"_UISwitchInternalViewNeueStyle1")]) {
[view.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
UIView *aview = obj;
if ([aview isKindOfClass:[UIImageView class]]) {
[view insertSubview:_onTitle belowSubview:aview];
}
}];
}
}];
JGSetOnTitle(_onTitle);
return _onTitle;
}
- (UILabel *)offTitle {
UILabel *_offTitle = JGGetOffTitle;
if (_offTitle) {
return _offTitle;
}
_offTitle = [self JGMakeLabel];
[self insertSubview:_offTitle atIndex:0];
[_offTitle setTextAlignment:NSTextAlignmentRight];
JGSetOffTitle(_offTitle);
return _offTitle;
}
#pragma mark - tools
- (UILabel *)JGMakeLabel {
UILabel *label = [[UILabel alloc] init];
[label setBackgroundColor:[UIColor clearColor]];
label.textColor = [UIColor blackColor];
CGRect frame = self.bounds;
frame.origin.x = 4;
frame.size.width -= 8;
label.frame = frame;
return label;
}
@end
UISwitch+JGLabel.m

http://www.cnblogs.com/madordie/p/4416111.html

 

转载于:https://www.cnblogs.com/madordie/p/4416111.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爱了!蚂蚁开源的“SpringBoot”框架,新增了这6项功能...

SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架&#xff0c;它在 Spring Boot 的基础上&#xff0c;提供了诸如 Readiness Check&#xff0c;类隔离&#xff0c;日志空间隔离等等能力。在增强了 Spring Boot 的同时&#xff0c;SOFABoot 提供了让用户可以在 Spring Boo…

JS关键字和保留字汇总

转载&#xff1a;http://www.itxueyuan.org/view/6627.htmlECMA-262 描述了一组具有特定用途的关键字。这些关键字可用于表示控制语句的开始或结束&#xff0c;或者用于执行特定操作等。按照规则&#xff0c;关键字也是语言保留的&#xff0c;不能用作标识符。以下就是ECMAScri…

PUC的完整形式是什么?

PUC&#xff1a;大学预科/污染控制/个人解锁码 (PUC: Pre University Course / Pollution Under Control / Personal Unlock Code) 1)PUC&#xff1a;大学预科课程 (1) PUC: Pre University Course) PUC is an abbreviation of the Pre University Course. It alludes to an in…

Sizzle.selectors.match/leftMatch

对象Sizzle.selectors.match/leftMatch中存放了表达式类型和正则的映射&#xff0c;正则用于确定块表达式的类型&#xff0c;并解析其中的参数。 相关代码如下&#xff1a; var Expr Sizzle.selectors {match : {ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.))/,CLASS: /\.((?:[\w\u…

过滤器VS拦截器的4个区别,看完豁然开朗!

Spring的拦截器与Servlet的Filter有相似之处&#xff0c;比如二者都是AOP编程思想的体现&#xff0c;都能实现权限检查、日志记录等。但它们之间又有很大区别&#xff0c;所以本文磊哥就带大家全面了解一下什么是过滤器&#xff1f;什么是拦截器&#xff1f;以及二者有什么区别…

js 自己试验 创建对象例子

js 创建对象例子 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script>function login() {alert(this.username " - login");}function CreateUser(username, password) { // var us…

云计算应用迁移_应用迁移策略到云

云计算应用迁移Rehost: 重新托管&#xff1a; Rehosting an application to the cloud without making changes to its architecture or code. 将应用程序重新托管到云&#xff0c;而无需更改其架构或代码。 Refactor: 重构&#xff1a; Involves application code and conf…

看美文,记单词(6)

combat vt.反对&#xff0c;与..战斗 vi.战斗&#xff0c;搏斗 n. 战争&#xff0c;争论 adj. 战斗的.. intensify vi. 增强&#xff0c;强化 vt. 使加强&#xff0c;使强化 detention n. 拘留&#xff0c;挽留&#xff0c;延迟 administrative detention 行政…

分布式ID生成的9种方法,特好用!

前言业务量小于500W或数据容量小于2G的时候单独一个mysql即可提供服务&#xff0c;再大点的时候就进行读写分离也可以应付过来。但当主从同步也扛不住的是就需要分表分库了&#xff0c;但分库分表后需要有一个唯一ID来标识一条数据&#xff0c;数据库的自增ID显然不能满足需求&…

js对象的定义方法

转载&#xff1a;http://blog.sina.com.cn/s/blog_60f632050100wz7h.html &#xff08;1&#xff09;基于已有对象的扩充方法&#xff1a;适用于临时构建对象&#xff0c;弊端&#xff1a;每次构建对象都要新建一个。 var objectnew Object();object.name"Tom";objec…

8051 管脚定义_8051微控制器的引脚说明

8051 管脚定义8051微控制器的引脚说明 (Pin Description of 8051 Microcontroller) Pins from 1-8 1-8针 Port 1: The pins in this port are bi-directional and can be used for input and output. The pins are individually controlled; some are used for input while ot…

android 事件分发

2019独角兽企业重金招聘Python工程师标准>>> 文章来源于CSDN http://blog.csdn.net/lanhuzi9999/article/details/26515421 转载于:https://my.oschina.net/lhjtianji/blog/398998

对象复制的7种方法,还是Spring的最好用!

日常编程中&#xff0c;我们会经常会碰到对象属性复制的场景&#xff0c;就比如下面这样一个常见的三层 MVC 架构。当我们在上面的架构下编程时&#xff0c;我们通常需要经历对象转化&#xff0c;将业务请求流程经历三层机构后需要把 DTO 转为DO然后在数据库中保存。当需要从数…

js visibility和display区别(附代码实例)

<html><head><meta charset"utf-8" /><title></title><script type"text/javascript">//元素的隐藏与显示//visibility属性是隐藏元素但保持元素的浮动位置&#xff0c;而display实际上是设置元素的浮动特征。//PS&am…

Java中的Switch都支持String了,为什么不支持long?

来源 | jitwxs.cn/6f3eddff.html我们知道 Java Switch 支持byte、short、int 类型&#xff0c;在 JDK 1.5 时&#xff0c;支持了枚举类型&#xff0c;在 JDK 1.7 时&#xff0c;又支持了 String类型。那么它为什么就不能支持 long 类型呢&#xff0c;明明它跟 byte、short、int…

什么是WebSocket,以及如何在Python中使用它?

什么是WebSocket&#xff1f; (What is WebSocket?) WebSocket is a communications protocol which provides a full-duplex communication channel over a single TCP connection. WebSocket protocol is standardized by the IETF as RFC 6455. WebSocket是一种通信协议&am…

QCon讲师对对碰——洪小军采访梁宇鹏:就是爱Golang

编者按&#xff1a;QCon北京2015将于4月23日~25日在北京国际会议中心召开。在大会开始之前&#xff0c;InfoQ推出了讲师对对碰栏目&#xff0c;邀请一些技术专家相互采访&#xff0c;碰撞出思维的火花。在QCon上&#xff0c;美图架构平台部门负责人洪小军将分享《美拍后端技术演…

网页之错误代码大全

winray整理~~~ 400 无法解析此请求。 401.1 未经授权&#xff1a;访问由于凭据无效被拒绝。 401.2 未经授权: 访问由于服务器配置倾向使用替代身份验证方法而被拒绝。 401.3 未经授权&#xff1a;访问由于 ACL 对所请求资源的设置被拒绝。 401.4 未经授权&#xff1a;W…

我们如何在Python中创建多行注释?

When we need to comment on multiple lines/statements, there are two ways to do this, either comment each line or create multiline comments (or block comment). 当我们需要对多个行/语句进行注释时&#xff0c;有两种方法可以执行此操作&#xff0c;或者注释每行或创…

final的8个小细节,听说只有高手才知道!你知道几个?

final关键字是一个常用的关键字&#xff0c;可以修饰变量、方法、类&#xff0c;用来表示它修饰的类、方法和变量不可改变&#xff0c;下面就聊一下使用 final 关键字的一些小细节。细节一、final 修饰类成员变量和实例成员变量的赋值时机对于类变量&#xff1a;声明变量的时候…