Swift 5.0 UIButton 2021-03-28

在Swift 5.0 版本下,总结基础视图UIButton


首先创建一个按钮,初始值任意设定:

importUIKit

class ViewController: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        // MARK: - 声明一个按钮与类型

        letbutton:UIButton=UIButton(type: .system)

        // MARK: - 设定按钮的坐标值与大小

        button.frame=CGRect(x:100, y:100, width:100, height:100)

        // MARK: - 添加按钮文字内容

        button.setTitle("按钮文字", for: .normal)

        // MARK: - 按钮背景颜色更变

        button.titleLabel?.backgroundColor = .black

        // MARK: - 添加按钮边框和颜色

        button.layer.borderWidth=10

        button.layer.borderColor = UIColor.black.cgColor

        // MARK: - 添加视图

        self.view.addSubview(button)

        // MARK: - 背景颜色为系统绿色

        self.view.backgroundColor = .systemGreen

    }

}


运行效果

按钮样式:

UIButton(type: .custom)   

按钮没有图片,仅有白色文字,黑色边框为按钮大小,点击时无效果


普通状态和点击状态效果一致

UIButton(type: .system)  

按钮没有图片,仅有系统原定的蓝色文字,点击时有效果


普通状态


点击时状态

UIButton(type: .contactAdd) 

按钮自带加号图标,所有内容颜色为系统原定蓝色,点击有效果


普通状态
点击时状态

UIButton(type: .close)  

按钮自带一个叉号和圆形阴影,点击阴影等于点击按钮,实际按钮范围大于阴影范围,点击时有效果

普通状态
点击时状态


给按钮边缘增加颜色后的状态
增加边框后点击时的状态

UIButton(type: .detailDisclosure),UIButton(type: .infoDark),UIButton(type: .infoLight)

三者效果相同,原型I图标加文字,皆为系统默认蓝色,点击有效果


普通状态
点击时状态



按钮坐标与大小

button.frame=CGRect(x:int, y:int, width:int, height:int)

x:横坐标,y:纵坐标,width:宽度,height:高度



一      按钮文字与效果

button.setTitle(String, for: UIControl.State)

string:文本,按钮的文字内容,若设置的文字内容长度超过了按钮的显示范围,则会省略文本的中端,显示XXX...XXX的样子,具体的指令会对此情况进行约束,详见二;

 UIControl.State:状态,表示在不同的状态下显示的效果.有以下几种

.normal:正常状态下效果 ; .highlighted 点击时瞬间的效果(一直按住按钮时的效果);  .disabled: 按钮禁用时效果; .selected 按钮被选中时候的效果

注意:禁用模式命令如下

button.isEnabled = Bool

二  设置按钮文本的显示

注意:使用以下命令时,按钮样式必须为定制,即为.custom,其他样式无效.

button.titleLabel?.lineBreakMode = .byTruncatingHead\Middle\Tail   

根据末尾字节的不同,分别表示 前略后详 例如:  ...XXXXX ; 中略前后详细 例:XXX....XXX; 后略前详 例:xxx....... 

.byClipping:效果类似.byTruncatingTail,但是后部显示不出部分不会用省略号代替     例XXXXXXXXX

.byWordWrapping 和 .byCharWrapping 两者皆为自动换行,但是前者会将一个词语保证在一行,后者不会;

例 AABBCCDDEE 前者会 AABB换行CCDDEE 后者会 AABBC 换行CDDEE

当选择以上两个指令时,可以通过在字符串添加   \n   来达成换行  例AA\nBB等于AA换行BB 

三    设置文本背景色与设置按键的背景色

button.titleLabel?.backgroundColor = UIColor 

表示设置按钮文本的背景色


button.backgroundColor = UIColor  

表示设置整个按钮有效区域的背景色


助记:titleLabel跟文本有关系,一般仅仅修改文本而不是影响整个button的设定要在titleLabel下操作

四   设置文本颜色

button.setTitleColor(UIColor?, for:UIControl.State)

UIColor:文本的色彩

UIControl.State:状态,其内容与要求,与一中所述的状态效果一致,表示在具体的状态下显示的颜色

五 设置文本字符

button.titleLabel?.font=UIFont.systemFont(ofSize:CGFloat)

CGFloat:填写需要的int字号即可

 六 设置阴影

button.setTitleShadowColor(UIColor?, for:UIControl.State)

UIColor:阴影的色彩

UIControl.State:状态,其内容与要求,与一中所述的状态效果一致,表示在具体的状态下显示的颜色

注意:必须要先设定阴影值才能出现效果

button.titleLabel?.shadowOffset = CGSize(width:int, height:int)

七  设置按钮的图片

button.setImage(UIImage(named:String), for: UIControl.State)

若是图片加文字的按钮,图片会在文字左边显示


图片在左,文字在右

button.adjustsImageWhenDisabled = Bool

禁用模式下,图片不会变暗

button.adjustsImageWhenHighlighted = Bool

点击时图片不会变暗(当一直按住按钮的时候)

注意: 当状态是.system的状态下时,图片可能会变成系统原设定的颜色,当是.custom时,图片为本色


.custom时
.system时

注意:当按钮文字状态需要.system时,而图片又想使用其本色时

let xxx = UIImage(named:String)?.withRenderingMode(.alwaysOriginal)


图片本色在.system的状态下

设置按钮的整个背景图片时

button.setBackgroundImage(UIImage(named:"String"), for: UIControl.State)


八  按钮的锐角值 边框厚度 与 边框颜色等设定

通过layer来设定按钮的锐角与边框等属性

锐角值设定:

当一个正方形按钮,锐角值为边长的一般是,则为圆形

button.layer.cornerRadius = int

设定按钮边框的厚度

button.layer.borderWidth = int

设定边框的颜色

button.layer.borderColor = UIColor.black.cgColor

masksToBounds指视图的图层上的子图层,如果超出父图层的部分就截取掉

 button.layer.masksToBounds = false


button.layer.masksToBounds = true


九  按钮图片和文本的位置调动

调动按钮的图片位置

button.imageEdgeInsets=UIEdgeInsetsMake(top:CGFloat,left:CGFloat,bottom:CGFloat,right:CGFloat)

调动按钮的文本位置

button.titleEdgeInsets=UIEdgeInsetsMake(top:CGFloat,left:CGFloat,bottom:CGFloat,right:CGFloat)

十    按钮的点击事件

importUIKit

class ViewController: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        // MARK: - 声明一个按钮与类型

        letbutton:UIButton=UIButton(type: .system)

        // MARK: - 设定按钮的坐标值与大小

        button.frame=CGRect(x:100, y:100, width:200, height:200)

        // MARK: - 添加按钮文字内容

        button.setTitle("按钮文字", for: .normal)

        // MARK: - 添加视图

        self.view.addSubview(button)

        // MARK: - 背景颜色为系统绿色

        self.view.backgroundColor = .systemGreen

        button.addTarget(self, action:#selector(dianji), for: .touchUpInside)

    }

    @objc func dianji(){

        print("dianji")

    }

}

网络上能查到常用的触摸事件类型:

touchDown:单点触摸按下事件,点触屏幕

touchDownRepeat:多点触摸按下事件,点触计数大于1,按下第2、3或第4根手指的时候

touchDragInside:触摸在控件内拖动时

touchDragOutside:触摸在控件外拖动时

touchDragEnter:触摸从控件之外拖动到内部时

touchDragExit:触摸从控件内部拖动到外部时

touchUpInside:在控件之内触摸并抬起事件

touchUpOutside:在控件之外触摸抬起事件

touchCancel:触摸取消事件,即一次触摸因为放上太多手指而被取消,或者电话打断

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容