[Android开发学iOS系列] 快速上手UIKit

快速上手iOS UIKit

UIKit是苹果官方的framework, 其间包含了各种UI组件, window和view, 事情处理, 交互, 动画, 资源管理等基础设施支持.

按照前面的介绍, 用UIKit写UI能够用storyboard(Interface Builder)和代码两种办法.

大体的思路都是增加组件后, 设置特点, 设置尺度位置束缚, 处理响应事情.

这儿主要介绍用代码写的景象. 期望这篇文章, 能够帮你快速上手UIKit, 了解常用的组件, 完结一些简略的UI界面相关任务.

在代码中写UI的基本过程

在代码中写UI的过程大致是:

  • 初始化.
  • addSubview增加到当时view, 或hierarchy中的其他可达view.
  • 设置束缚.

比如:

class ViewController: UIViewController {
    var myLabel: UILabel!
    override func loadView() {
        view = UIView()
        view.backgroundColor = .white
      // 创立实例
        myLabel = UILabel()
        myLabel.translatesAutoresizingMaskIntoConstraints = false
        myLabel.text = "Hello"
        // 增加到view中
        view.addSubview(myLabel)
        // 设置束缚
        NSLayoutConstraint.activate([
            myLabel.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor),
            myLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor),
        ])
    }
}

这儿有几点阐明:

  • var** myLabel: UILabel! 组件字段这样声明有lateinit的作用, 假如不带!会报错, 说controller没有init办法.
  • 假如在代码中设置UI组件的constraints, 那么这个特点常常要设置为false: translatesAutoresizingMaskIntoConstraints = **false**. 假如组件的位置是经过frame来设置的, 则不必设置这个特点.
  • 束缚有多种写法, 这儿只是其间一种, 用anchor的办法.

常用组件

文字: UILabel

设置文字等特点:

myLabel = UILabel()
myLabel.translatesAutoresizingMaskIntoConstraints = false
myLabel.font = UIFont.systemFont(ofSize: 24)
myLabel.text = "Hello"
myLabel.numberOfLines = 0
myLabel.textAlignment = .right

给UILabel设置点击事情:

myLabel.isUserInteractionEnabled = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(userDidTapLabel(tapGestureRecognizer:)))
myLabel.addGestureRecognizer(tapGesture)

点击事情处理办法:

@objc func userDidTapLabel(tapGestureRecognizer _: UITapGestureRecognizer) {
    print("label clicked!")
}

这儿有#selector, 对应的userDidTapLabel办法要加上@objc. 便于OC的代码调用能找到swift的办法.

给UILabel设置点击事情和UIButton不同, 这点咱们后边说承继联系的时分解释一下.

按钮: UIButton

设置文字:

submitButton = UIButton(type: .system)
submitButton.translatesAutoresizingMaskIntoConstraints = false
submitButton.titleLabel?.font = UIFont.systemFont(ofSize: 36)
submitButton.setTitle("SUBMIT", for: .normal)
submitButton.setTitleColor(.black, for: .normal)

设置点击事情:

submitButton.addTarget(self, action: #selector(submitTapped), for: .touchUpInside)
@objc func submitTapped(_ sender: UIButton) {
}

这儿运用@objc的理由同上.

基本上咱们在iOS代码中用到#的时分, 对应的办法都要加上@objc.

输入框: UITextField

myTextField = UITextField()
myTextField.translatesAutoresizingMaskIntoConstraints = false
myTextField.placeholder = "What's your name?"
myTextField.textAlignment = .center
myTextField.font = UIFont.systemFont(ofSize: 44)

想要禁用输入框能够这样:

myTextField.isUserInteractionEnabled = false

弹框

在app里简略的交互咱们常常需求弹出一个对话框:

let alert = UIAlertController(title: "title", message: "message", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ok", style: .default))
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel))
present(alert, animated: true)

其间preferredStyle有.alert.actionSheet两种.

.alert是中心的对话框, 一般用于信息提示或许确认操作; .actionSheet是底部的bottom sheet, 一般用来在几个选项中做挑选.

其他

  • view中比较常用的特点isHidden, 控制view是否需求躲藏.
  • 一切的UIView都有一个layer特点. 设置border的宽度和色彩就在layer上设置. CALayer在UIView之下. 所以不知道UIColor, 只知道CGColor.

本文仅列出几个常用组件, 更多的请看官方示例.

这儿能够下载

承继联系

NSObject是一切Cocoa Touch class的基类. 一切UIKit中的类都是它的子类.

这儿有一个类联系的图:

[Android开发学iOS系列] 快速上手UIKit

咱们这儿不打开讲述一切了, 只解答一下前面提出的关于UILabel点击事情的问题.

[Android开发学iOS系列] 快速上手UIKit

这儿能够看到UILabelUIButton虽然都承继了UIView, 可是UIButton的承继层次更深一些, 它还承继了了UIControl.

能够看到和UIButton平级的还有好几个子类.

Controls运用的是target-action机制, 一切的action都经过办法: addTarget(_:action:for:) 增加.

束缚Constraints

当在代码中设置束缚时, 有三种挑选:

  • 运用layout anchors.
  • 运用NSLayoutConstraint类.
  • 运用Visual Format Language.

上面咱们提到过的便是其间Layout Anchors的写法:

初级单个写法:

buttonsView.topAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
buttonsView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
buttonsView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
buttonsView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

放进数组里批量激活写法:

NSLayoutConstraint.activate([
            buttonsView.topAnchor.constraint(equalTo: view.centerYAnchor),
            buttonsView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
            buttonsView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            buttonsView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
        ])

感觉是对新手比较直观的一种写法.

其他写法文末有参考文档.

PS: 项目中更流行用 SnapKit.

区域限制

  • safeAreaLayoutGuide : 去掉圆角和刘海.
  • layoutMarginsGuide : safe area的内部再加上一些额外的margin.

Bonus

  • 友情提示: 在xcode里就能够看官方文档, 快捷键是Cmd + Shift + 0.

References

  • UIKit Documentation
  • UIKit Catalog
  • codewithchris.com/swift-tutor…
  • Programmatically Creating Constraints
蓝色微笑ing
分享 收藏 点赞(0)
上一篇
Android进阶宝典 — CoordinatorLayout协调者布局原理分析并实现吸顶效果
下一篇
使用 Seldon Core 服务模型

PHP网站源码吉祥企业网站设计大芬百度竞价包年推广横岗关键词排名大鹏关键词按天计费坑梓推广网站龙岗外贸网站建设布吉标王大芬关键词按天收费石岩关键词按天扣费横岗百姓网标王石岩SEO按效果付费平湖关键词排名木棉湾网站开发福田标王沙井模板制作大鹏优秀网站设计民治网站建设设计观澜网站改版福田网络推广观澜关键词按天收费南联设计网站坑梓阿里店铺运营丹竹头建网站南澳设计公司网站同乐网站制作设计塘坑网站建设西乡标王福永网络推广大浪百度seo大浪外贸网站建设歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化