文章目录

  • 1.截图
  • 2.代码
    • 2.1 XYswitchView.swift
    • 2.2 LoginVC.swift
  • 3.参考博客

1.截图

2.代码

2.1 XYswitchView.swift

import UIKitprotocol XYswitchViewDelegate : AnyObject{var isPhoneBtnSelected:Bool {get set}
}class XYswitchView: UIView {private weak var delegate:XYswitchViewDelegate?override init(frame: CGRect) {super.init(frame: frame)setupUI()}convenience init(delegate:XYswitchViewDelegate){self.init(frame: CGRect.zero)self.delegate = delegateisPhoneBtnSelected = true}var isPhoneBtnSelected: Bool{set{delegate?.isPhoneBtnSelected = newValueif newValue {phoneBtn.isSelected = trueemailBtn.isSelected = falsephoneBtnLine.isHidden = falseemailBtnLine.isHidden = true}else{phoneBtn.isSelected = falseemailBtn.isSelected = truephoneBtnLine.isHidden = trueemailBtnLine.isHidden = false}}get{return phoneBtn.isSelected}}lazy var phoneBtn:UIButton = {let btn = UIButton(type: .custom)btn.addTarget(self, action: #selector(phoneBtnClick), for: .touchUpInside)btn.setTitle(LocalizableManager.localValue("phone"), for: .normal)btn.setAttributedTitle(phoneBtnNormal, for: .normal)btn.setAttributedTitle(phoneBtnSelected, for: .selected)return btn}()@objc func phoneBtnClick(){isPhoneBtnSelected = true}lazy var phoneBtnLine:UIView = {let view = UIView()view.backgroundColor = UIColor.hexColor(hexValue: 0x0D0E0F)view.layer.cornerRadius = 1.25view.layer.masksToBounds = truereturn view}()lazy var emailBtn:UIButton = {let btn = UIButton(type: .custom)btn.addTarget(self, action: #selector(emailBtnClick), for: .touchUpInside)btn.setTitle(LocalizableManager.localValue("email"), for: .normal)btn.setAttributedTitle(emailBtnNormal, for: .normal)btn.setAttributedTitle(emailBtnSelected, for: .selected)return btn}()lazy var emailBtnLine:UIView = {let view = UIView()view.backgroundColor = UIColor.hexColor(hexValue: 0x0D0E0F)view.layer.cornerRadius = 1.25view.layer.masksToBounds = truereturn view}()@objc func emailBtnClick(){isPhoneBtnSelected = false}required init?(coder: NSCoder) {fatalError("init(coder:) has not been implemented")}}extension XYswitchView {func setupUI(){addSubview(emailBtn)emailBtn.snp.makeConstraints { (make) inmake.centerY.equalToSuperview()make.centerX.equalToSuperview().multipliedBy(1.25)}addSubview(emailBtnLine)emailBtnLine.snp.makeConstraints { (make) inmake.width.equalTo(20)make.height.equalTo(2.5)make.centerX.equalTo(emailBtn)make.top.equalTo(emailBtn.snp_bottom)}addSubview(phoneBtn)phoneBtn.snp.makeConstraints { (make) inmake.centerY.equalToSuperview()make.centerX.equalToSuperview().multipliedBy(0.75)}addSubview(phoneBtnLine)phoneBtnLine.snp.makeConstraints { (make) inmake.width.equalTo(20)make.height.equalTo(2.5)make.centerX.equalTo(phoneBtn)make.top.equalTo(phoneBtn.snp_bottom)}}//选中状态private var phoneBtnSelected:NSAttributedString {NSAttributedString(string: LocalizableManager.localValue("phone"), attributes: [NSAttributedString.Key.font : UIFont(name: "PingFangSC-Semibold", size: 18),NSAttributedString.Key.foregroundColor:UIColor.hexColor(hexValue: 0x0F0F0F)])}private var emailBtnSelected:NSAttributedString {NSAttributedString(string: LocalizableManager.localValue("email"), attributes: [NSAttributedString.Key.font : UIFont(name: "PingFangSC-Semibold", size: 18),NSAttributedString.Key.foregroundColor:UIColor.hexColor(hexValue: 0x0F0F0F)])}//非选中状态private var phoneBtnNormal:NSAttributedString {NSAttributedString(string: LocalizableManager.localValue("phone"), attributes: [NSAttributedString.Key.font : UIFont(name: "PingFangSC-Regular", size: 18),NSAttributedString.Key.foregroundColor:UIColor.hexColor(hexValue: 0x5C5C5C)])}private var emailBtnNormal:NSAttributedString {NSAttributedString(string: LocalizableManager.localValue("email"), attributes: [NSAttributedString.Key.font : UIFont(name: "PingFangSC-Regular", size: 18),NSAttributedString.Key.foregroundColor:UIColor.hexColor(hexValue: 0x5C5C5C)])}
}

2.2 LoginVC.swift

class LoginVC: UIViewController, XYswitchViewDelegate {var isPhoneBtnSelected: Bool{set{if newValue {//phoneBtn被选中做相应操作}else{//emailBtn被选中做相应操作}}get{ true }}lazy var switchView:XYswitchView = {let switchView = XYswitchView(delegate: self)return switchView}()func setupUI(){view.addSubview(loginLabel)loginLabel.snp.makeConstraints { (make) inmake.left.equalToSuperview().offset(25)make.top.equalToSuperview().offset(Global.statusBarHeight + 44)}view.addSubview(switchView)switchView.snp.makeConstraints { (make) inmake.left.right.equalToSuperview()make.height.equalTo(50)make.top.equalTo(loginLabel.snp_bottom).offset(15)}}

3.参考博客

25.swift-UIView(纯代码自定义) - 简书

ios swift 纯代码自定义view(控件) XYswitchView相关推荐

  1. iOS自定义View 控件自动计算size能力

    iOS自定义View 控件自动计算size能力 背景 在使用 UILabel 和 UIImage 的时候,不用指定宽高约束,控件也不会报约束缺失,还可以根据内容自己确定适合的宽高,特别适合 Xib 和 ...

  2. 安卓中自定义view控件代替radiogroup实现颜色渐变效果的写法

    利用自定义控件代替radiogroup,同时实现在使用viewpager进行翻页的时候,实现颜色渐变的效果. 一: 首先创建一个自定义view类继承自View类,所有的控件均用canvas绘制出来(包 ...

  3. 自定义View控件(2—手写实例代码)

    1. 步骤: + 1.自定义一个类继承于UIView + 2.在initWithFrame方法中添加子控件 + 3.在layoutSubviews中设置子控件的位置 + 4.提供一个属性保存外界传入的 ...

  4. android 自定义view控件,Android 自定义View——自定义View控件

    Android给我们提供了大量的View控件,但这还是远远满足不了我们的要求,有时候开发所需要的控件形式是在Android提供的控件中是不存在,这就需要我们自己去定义一个.那么如何自定义控件? 学习自 ...

  5. ASP.NET中实现复用代码自定义用户控件UserControl的使用

    场景 ASP.NET中新建Web网站并部署到IIS上(详细图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/107199 ...

  6. Android自定义View控件

    转自:http://blog.csdn.net/lvwenbo0107/article/details/50542597 写的够详细了 为什么要自定义控件 1.特定的显示风格. 2.处理特有的用户交互 ...

  7. ios swift 纯代码设置UITableViewCell的style

    1.dequeueReusableCell(withIdentifier:)方法不需要注册 func tableView(_ tableView: UITableView, cellForRowAt ...

  8. OS开发之纯代码界面--基本控件使用篇

    刚学IOS开发的时候,跟着书本也用过苹果的拖动摆放图形界面是不是叫UIBuilder??? 后来不知什么时候就不用了,现在回头看看,那些工具就是在误导,让你以为很简单,但是用好很难,维护起来....不 ...

  9. java自定义日历控件_【无私分享】修订版干货!!!一个炫酷的自定义日历控件,摆脱日历时间选择烦恼,纯福利~...

    可能不少的小伙伴都有看楼主昨天发的自定义日历控件,虽然实现功能不多,但也还算将就吧. 但是看了的小伙伴就很心急了,说楼主上传到gitHub的东西有问题,楼主下载来看了看,基本都没问题吧,没弄好的小伙伴 ...

最新文章

  1. php写poc,xray写POC踩坑
  2. Leetcode题库 598.N叉树的前序遍历(递归迭代 C实现)
  3. 经验分享:三步走教你升级企业NAS设备
  4. 去掉ExpandableListView的箭头图标
  5. unity 纹理压缩格式‘_纹理优化:让你的纹理也“瘦”下来
  6. java 并发 变量_实例讲解Java并发编程之变量
  7. es聚合查询与多维度数据统计
  8. python模块调用的用法_python模块怎么使用
  9. python将数据变成float32,Python:将numpy默认为float32
  10. linux无缝升级的版本,Angular 1 和 Angular 2 集成:无缝升级的方法
  11. apktool + dex2jar + xjad反编译apk文件
  12. 工控c语言培训,[转载]最完整的工控培训、PLC培训教程大全
  13. 马哥python全栈培训怎么样,你只需要在马哥教育待四个月
  14. 求传递闭包c语言具体编程,实验一_传递闭包的实现.doc
  15. ESP8266 驱动步进电机(28BYJ-48电机 ULN2003 驱动板)
  16. 怎么看自己电脑的IP地址
  17. java 接收 gprs通信_java 接收GPRS数据
  18. 群控进化史,黑产攻击效率提升带来的防守困境
  19. 男朋友该对女生说的23句话(转)
  20. 回顾Win10自带表情包快捷键

热门文章

  1. PLC实验:定时器/计数器功能实验
  2. 【经典算法实现 44】理解二维FFT快速傅里叶变换 及 IFFT快速傅里叶逆变换(迭代法 和 递归法)
  3. 嵌入式准备 -- git、VSvode
  4. Unity UGUI 代码改变遮挡层级
  5. 架构——20——Jenkins+Gitlab实现持续集成——3
  6. python下划线怎么输入_Python中下划线的使用方法有哪些
  7. CSS绘制常见的几何图形
  8. 如何清理系统大量的残余文件和系统垃圾文件?(win10)
  9. 关于家庭小型无线网络信号不稳定的说明
  10. opencv手势识别(2_KNN算法识别)