iOS UI系列 (四) :可复用的Xib(1) 静态内容

有时候页面中的部分内容相同,或者是一些静态的内容组合,这时候我们就可以把这些见面封装到一个XIB里

新建Single View Application

新建一个View.Xib

  1. Command+N–>User Interface–>View
  2. 把界面大小改为Freeform
  3. 添加一个UILabel, 两个UIView, 并设置对应的背景色
  4. 添加对应的约束,让两个UIView等宽,且Space都是10, 高度固定,且与周围的约速为10, 对UILabel也设置对应的约速,细节就不写了,看图

使用Xib

在ViewController添加 一个UIView, 并设置对应的约束,连接这个UIView为Controller的 IBOutlet ContainerView

  1. 在ViewDidLoad里添加如下代码
1
2
3
4
5
6
7
super.viewDidLoad()

let arr = NSBundle.mainBundle().loadNibNamed("View", owner: nil, options: nil)

let v = arr[0] as! UIView

containerView.addSubview(v)

运行

  1. 添加约束
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import UIKit

class ViewController: UIViewController {

@IBOutlet weak var containerView: UIView!

var v: UIView!

override func viewDidLoad() {

super.viewDidLoad()

let arr = NSBundle.mainBundle().loadNibNamed("View", owner: nil, options: nil)
v = arr[0] as! UIView


​ containerView.addSubview(v)

1
setUpConstraint()


​ // Do any additional setup after loading the view, typically from a nib.
​ }

1
2
3
4
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 func setUpConstraint()
{

v.setTranslatesAutoresizingMaskIntoConstraints(false)

containerView.addConstraint(NSLayoutConstraint(
item:v, attribute:.Leading,
relatedBy:.Equal, toItem:containerView,
attribute:.Left, multiplier:1, constant:0))

containerView.addConstraint(NSLayoutConstraint(
item:v, attribute:.Trailing,
relatedBy:.Equal, toItem:containerView,
attribute:.Right, multiplier:1, constant:0))

containerView.addConstraint(NSLayoutConstraint(
item:v, attribute:.Top,
relatedBy:.Equal, toItem:containerView,
attribute:.Top, multiplier:1, constant:0))

containerView.addConstraint(NSLayoutConstraint(
item:v, attribute:.Bottom,
relatedBy:.Equal, toItem:containerView,
attribute:.Bottom, multiplier:1, constant:0))

}

}


3. 运行结果, 我们的Xib已经可以自适应容器了


iOS UI系列 (三) :Reusable Button

有时候我们需要给一些做一些设置,但是这些控件却需要用在多个地方,如果在每一个ViewController都设置一遍,那么代码就不整洁了,而且比较耗时间。

创建一个RoundButton.swift 文件,集成自UIButton

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import UIKit

class RoundButton: UIButton {

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func drawRect(rect: CGRect) {
// Drawing code
}
*/

required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}

override init(frame: CGRect) {
super.init(frame: frame)
}

override func awakeFromNib() {

self.layer.cornerRadius=10
self.layer.borderColor=UIColor.redColor().CGColor
self.layer.borderWidth=2
self.layer.backgroundColor=UIColor.yellowColor().CGColor
self.contentEdgeInsets=UIEdgeInsets(top: 10,left: 10,bottom: 10,right: 10)
}
}




设置UIButton的Custom class为 RoundButton

iOS UI系列 (二) :使用多个StoryBoard

为什么要使用多个StoryBoard

StoryBoard 给项目带了很大的方便,在一个视图里可以看到整个项目页面之间的关系,但是如果项目所有的页面都放到一个StoryBoard, 会带来以下一些问题

  • UIStoryBoard太大
  • 每次打开StoryBoard比较慢
  • 一个窗口里面显示所有的View,显得比较混乱,尤其是一个显示器看不全的时候
  • UIStoryBoard 项目解决源码冲突太麻烦

所以,我建议项目使用多个StoryBoard, 不同模块使用不同的UIStoryBoard, 下面是如何使用的实例。

Main Storyboard

首先建立一个Single View Application, 在StoryBoard里添加2个UIViewController, 并且设置好导航关系

新建一个SecondViewController类, Command+N–>Coca Touch cass–>Next, 继承UIViewController, 选择Swift语言

import UIKit

class SecondViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

设置第二ViewController的File’s owner 的class为刚新建的SecondViewController

第二个StoryBoard

Command+N–>User Interface—>StoryBoard,命名Second

添加2个UIViewController, 并添加对应的按钮,将View的背景色改为黄色,以区别这是第二个UIStoryBoard, 按住Ctrl从第一个ViewController拖到第二个ViewController,选择Show

设置第一个UIViewController如下

<img class=”img-responsive”src=”https://cdn.jsdelivr.net/gh/wangdeshui/blogpics@master/ios/UI/2/3.png" />

连接2个StoryBoard

打开Main.storyboard, 为SecondViewController上的按钮建立一个IBAction, 然后在SecondViewController.swift里添加如下代码

 @IBAction func GotoSecondStoryBoard(sender: AnyObject) {

         let vc = UIStoryboard(name: "Second", bundle: nil).instantiateInitialViewController() as! UIViewController
        self.navigationController?.pushViewController(vc, animated: true)

    }

如果我们不设置Is Intial View Controller, 那么我们需要设置View Controller的StoryBoard Id, 然后使用如下代码

let vc = UIStoryboard(name: "Second", bundle: nil).instantiateViewControllerWithIdentifier("FirstView") as! UIViewController
self.navigationController?.pushViewController(vc, animated: true)

结果图 (Gif)

iOS UI系列 (一) :Auto Layout 高度三等分

首先我们创建一个Single View Application

然后我们向StoryBoard的ViewController 添加3个UIView, 设置不同的背景色,我们的目的是让这三个UIView垂直高度三等分。

接下来我们需要设置约速,我们让每个试图和周围的具体都是5,然后设置三个视图等高约束,具体看gif动态图, 如果看不清 右键图片–>open in new Tab

iOS开发(一):真机调试

苹果真机调试是比较麻烦的,需要代码签名,主要的作用就是确保程序是苹果认证的开发者开发,下面列出主要的步骤。

购买开发者帐号

之前iOS开发者帐号和Mac开发者帐号需要分开购买,现在都合并为Apple Developer Program了,所以只需要出一份钱了。打开 https://developer.apple.com/programs/, 点击右上角Enroll

点击start your enrollment

选择你是个人开发者还是企业,选择个人开发者

然后就按照步骤完成购买,一般需要几天才能审核通过。

创建证书请求申请 (Certificate Signing Request)

选择 “Certificate Assistant”,然后点击 “Request Certificate from A Certificate Authority.”

填入你的Email 名字,选择Save to Disk, 这是会生成一个CertificateSigningRequest.certSigningRequest 文件

创建开发者证书

登录开发者中心,选择证书Development, 然后点击右边添加

选择Development—>iOS App Development

这一步上传你刚才的CertificateSigningRequest.certSigningRequest 文件,点击Generate

Download 你的证书,然后双击就会加入系统

注册你的设备

如果不知道UUID, 打开iTunes, 双击Serial Number

创建App ID

看说明创建你需要的APP ID, 主要是Bundle ID, 一般我们类似这样确保唯一 com.jackwang.nbapp

创建Provisioning Profile

选择iOS development, 点击继续,然后选择你刚的App ID,继续,选择要包含的开发者证书,点击继续,选择要包含的设备, 随后就generate你的provisioning profile.

找到对应的Profile 下载后双击即可。

项目设置

设置项目的Bundle ID 为之前创建的APP ID

然后选择你对应的Code Sign

真机调试

插入你的设备,选择你的设备,点击运行,就可以真机调试了。