swift 创建类方法(扩展)和便利构造函数

news/2024/11/16 22:50:34/
//
//  UIButtonExtension.swift
//  ZYFWB
//
//  Created by fe on 2017/3/8.
//  Copyright © 2017年 fe. All rights reserved.
//import UIKit//UIButton的类方法扩展
extension UIButton {//这里的类方法相当于OC中的加号方法class func creatButtonWithImageName(imageName : String , bgImageName : String) -> UIButton {//创建按钮let button = UIButton()//设置按钮的背景图片button.setBackgroundImage(UIImage(named: bgImageName), for: UIControlState.normal)button.setBackgroundImage(UIImage(named: bgImageName + "_highlighted"), for: UIControlState.highlighted)//设置按钮的图片button.setImage(UIImage(named: imageName), for: UIControlState.normal)button.setImage(UIImage(named: imageName + "_highlighted"), for: UIControlState.highlighted)//按照背景图片初始化按钮尺寸button.sizeToFit()//返回按钮return button}/*convenience : 便利,使用convenience修饰的构造函数叫做便利构造函数便利构造函数通常在对系统的类进行构造函数的扩充时使用便利构造函数的特点1.便利构造函数通常是写在extension中2.便利构造函数init前面需要加载convenience3.在便利构造函数中需要明确调用self.init*/convenience init(imageName : String , bgImageName : String) {self.init()//设置按钮的图片setImage(UIImage(named: imageName), for: UIControlState.normal)setImage(UIImage(named: imageName + "_highlighted"), for: UIControlState.highlighted)//设置按钮的背景图片setBackgroundImage(UIImage(named: bgImageName), for: UIControlState.normal)setBackgroundImage(UIImage(named: bgImageName + "_highlighted"), for: UIControlState.highlighted)//按照背景图片初始化按钮尺寸sizeToFit()}}

//
//  MainViewController.swift
//  ZYFWB
//
//  Created by fe on 2017/3/7.
//  Copyright © 2017年 fe. All rights reserved.
//import UIKitclass MainViewController: UITabBarController {//懒加载tabBar选中图片的数组lazy var selectImages = ["tabbar_home","tabbar_message_center","","tabbar_discover","tabbar_profile"]//懒加载中间的发布按钮(使用类方法)//lazy var composeBtn : UIButton = UIButton(imageName : "tabbar_compose_icon_add" , bgImageName : "tabbar_compose_button")//懒加载中间的发布按钮(使用构造方法)lazy var composeBtn : UIButton = UIButton.creatButtonWithImageName(imageName : "tabbar_compose_icon_add"  , bgImageName : "tabbar_compose_button")//系统调用函数override func viewDidLoad() {super.viewDidLoad()//设置发布按钮setupComposeBtn()}//系统调用函数override func viewWillAppear(_ animated: Bool) {super.viewWillAppear(animated)//调整tabBar的显示细节问题需要在该方法中,如果在viewDidLoad中调整,则在该方法中会被调整回来setupTabBarItems()}override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()// Dispose of any resources that can be recreated.}}// MARK:-设置UI界面
extension MainViewController {func setupComposeBtn() {//设置发布按钮位置composeBtn.center = CGPoint(x: tabBar.center.x, y: tabBar.frame.size.height * 0.5)//添加发布按钮到tabBartabBar.addSubview(composeBtn)}//调整tabbaritemsfunc setupTabBarItems() {//遍历tabBarItemfor i in 0..<tabBar.items!.count{//拿到itemlet item = tabBar.items![i]//如果i为2则控制item不能点击if i == 2 {item.isEnabled = falsecontinue}//设置item的选中图片item.selectedImage = UIImage(named: selectImages[i] + "_selected")}}
}






http://www.ppmy.cn/news/754230.html

相关文章

swit4 获取属性列表

class People: NSObject { var name:String? var age:Int 0 var title:String? // override init() { // // name"dffe" // // // let <#name#> <#value#> // let cont UInt32() // // // class_copyIvarList(self, &…

数据结构第一章 绪论——走进数据的世界

名人说&#xff1a;唯一可以确定的是&#xff0c;明天会使我们所有人大吃一惊。——阿尔文托夫勒 本篇笔记整理&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; ✔ 课件资料及视频课程学习&#xff1a;王道 数据结构&#xff08…

既然有指针了,为什么 C++ 还搞个引用出来?

1. 对象的定义&#xff1a; 对象是指一块能存储数据并具有某种类型的内存空间&#xff1b; 一个对象a&#xff0c;它有值和地址&a&#xff0c;运行程序时&#xff0c;计算机会为该对象分配存储空间&#xff0c;来存储该对象的值&#xff0c;我们通过该对象的地址&#xf…

PHP生成一寸照片代码,ps做一寸证件照的步骤

生活中我们经常会遇到需要证件照的场合&#xff0c;好看的证件照也能给个人形象加分。那么怎么用ps做一寸证件照呢&#xff1f;下面为大家分享用ps做一寸证件照的步骤。 我们先放一张表格&#xff0c;来了解下一般证件照所需要的尺寸&#xff1a; ps做一寸证件照的步骤&#xf…

PyQt---------信号与槽函数的关系

1.信号&#xff08;Signal&#xff09; 信号是在特定情况下被发射的一种通告。举例&#xff1a; PushButton 的信号是鼠标单击时发射的 clicked 信号 2.槽&#xff08;Slot&#xff09; 对信号相应的函数。举例&#xff1a; QWidget 有一个槽函数&#xff0c;功能是关闭窗口 …

寸照尺寸

[常识]一寸照片是多大? 一寸2.5*3.5cm295*413像素 1寸照片 平时都用寸来表示照片的规格但很多朋友包括我在内都还搞不清楚这1 寸照片到底是多大二寸照片为何不是一寸照片的两倍大一寸是多少像素等问 题现在就把常用的照片尺寸、对应的大小厘米及数码相机分…

开源项目推荐 【SkyEyeSystem】

大家好&#xff0c;今天向大家推荐一个开源项目——SkyEyeSystem。 这是一个基于Spring Boot的全网热点爬虫项目&#xff0c;旨在提供全面而准确的全网热搜数据。 关于项目 SkyEyeSystem通过定时任务间隔10min爬取全网热搜数据。目前包括的平台有&#xff1a; 微博热搜B站热…

【Redis】缓存穿透、缓存击穿、缓存雪崩的原因及解决方案

文章目录 一、缓存穿透1.1 产生原因1.2 解决方法接口校验对空值进行缓存使用布隆过滤器实时监控 二、缓存雪崩2.2 解决方法将失效时间分散开给业务添加多级缓存构建缓存高可用集群使用锁或者队列的方式设置缓存标记 三、缓存击穿3.2 解决方法使用互斥锁”提前“使用互斥锁 / 逻…