Tạo View trong lập trình iOS
Mở đầu
Chắc hẳn các bạn khi được học, hay bắt đầu làm việc với một dự án iOS thì đều phân vân là nên sử dụng cách nào để tạo giao diện View. Mình xin liệt kê ở đây 3 cách mà những lập trình viên tùy theo mục đích mà sử dụng.
- Sử dụng Storyboard.
- Interface Builder (XIB).
- Tạo view bằng CODE (sinh viên hay nói cách này dành cho pro).
Cách sử dụng
Storyboard
- Storyboard là gì ?
Đơn giản storyboard như là một bản thiết kế đơn giản hóa của ứng dụng, trong đó có chi tiết giao diện và luồng chạy của ứng dụng. Team sẽ dễ dàng phối hợp, phân chia công việc rất hiệu quả. Giúp cho người mới có cái nhìn tổng quan về cấu trúc thiết kế của ứng dụng và nắm bắt dự án rất nhanh.Storyboard rất tuyệt vời nhưng nó cũng mang lại một phiền phức như : git merge conflicts, mutable variables, coupled view controllers.
Interface Builder (XIB)
- Sử dụng file xib rất đơn giản, ta có thể tạo có cùng với class
Tiếp theo là ví dụ về cách thiết lập View Controller
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
30
31
32
33
34
35
36
37
|
//
// SampleViewController.swift
// IOSSamples
//
// Created by VTI on 4/8/18.
// Copyright © 2018 VTI. All rights reserved.
//
import UIKit
class SampleViewController: UIViewController {
// This Very important attribute is necessary for this view controller
// to perform some actions.
//
// Note that, in this case, this attribute is declared as 'let',
// it's IMMUTABLE.
let veryImportantAttribute: String
override func viewDidLoad() {
super.viewDidLoad()
}
// In this custom initializer we can send dependencies that are needed
// from this view controller to work properly.
// We simply can't forget to pass data. In that case, the project won't compile.
init(veryImportantAttribute: String) {
self.veryImportantAttribute = veryImportantAttribute
super.init(nibName: "SampleViewController", bundle: nil)
}
// This will be never called, so we don't need to care
// about its implementation.
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
|
Ở đây tôi tạo hàm custom init, để dễ dàng hơn cho việc truyền dữ liệu từ View Controller này sang View Controller khác.
Chỉnh sửa AppDelegate
Tại file AppDelegate ta cần phải chỉnh sửa để cho phép app khởi động sử dụng file XIB:
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
|
//
// AppDelegate.swift
// IOSSamples
//
// Created by VTI on 4/8/18.
// Copyright © 2018 VTI. All rights reserved.
//
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
self.window = UIWindow(frame: UIScreen.main.bounds)
let attribute = "Sample"
let initialViewController = SampleViewController(veryImportantAttribute: attribute)
window!.rootViewController = initialViewController
window!.makeKeyAndVisible()
return true
}
}
|
Điểm khác biệt khi sử dụng file XIB riêng biệt
Sử dụng file XIB riêng biệt cho từng View Controller có những lợi thế sau:
- Dễ dàng chia việc hơn trong team tránh được tình trạng 2 người cùng làm ở 1 file và gây conflict khi merge code.
- Dễ dàng truyền dữ liệu giữa các View Controller.
- Dễ dàng cho việc maintain code, dễ thay thế.
Tạo view bằng CODE
Đây là một cách nhìn có vẻ khá nguy hiểm (theo ngôn ngữ sinh viên), nhưng lại là một cách rất hay được sử dụng đối với nhưng lập trình viên chuyên nghiệp. Mình xin chia sẻ cách này ở bài viết sau.