.1 Các trạng thái và cách chuyển trạng thái của một Controller

Một phần của tài liệu Giáo trình lập trình di động trên iOS Dành cho bậc Cao đẳng (Trang 81 - 85)

74

Vòng đời của một Controller trong iOS:

- Phương thức viewDidLoad(): Phương thức này được gọi khi giao diện của Controller được khởi tạo và lấy vào từ storyboard. Phương thức cũng thường được sử dụng để thiết lập thêm các yêu cầu cấu hình bổ sung cho giao diện của Controller. Phương thức này chỉ được gọi duy nhất một lần lúc khởi tạo Controller.

- Phương thức viewWillAppear(): Được gọi ngay trước khi giao diện của Controller được đưa vào app’s view hierarchy. Như vậy, phương thức này thường được dùng để thực hiện các công việc trước khi giao diện của Controller được hiển thị lên màn hình điện thoại iPhone.

- Phương thức viewDidAppear(): Được gọi ngay sau khi giao diện của Controller

được đưa vào app’s view hierarchy. Như vậy, phương thức này thường được dùng để thực hiện các công việc ngay sau khi giao diện của Controller được hiển thị lên màn hình điện thoại iPhone (như lấy dữ liệu, thực hiện hoạt cảnh…).

- Phương thức viewWillDisappear(): Được gọi ngay trước khi giao diện của

Controller được xoá khỏi app’s view hierarchy. Như vậy, phương thức này thường được dùng để thực hiện các công việc dọn dẹp trước khi giao diện của Controller biến mất khỏi màn hình điện thoại iPhone.

- Phương thức viewDidDisappear(): Được gọi ngay sau khi giao diện của Controller được xoá khỏi app’s view hierarchy. Như vậy, phương thức này thường được dùng để thực hiện các cơng việc cịn lại (nếu có) sau khi giao diện của Controller biến mất khỏi màn hình điện thoại iPhone.

Xử lý sự kiện cho đối tượng Text Field:

Đối tượng này cho phép chúng ta nhập tên của món ăn. Mỗi khi tap vào đối tượng này, một Software Keyboard sẽ hiện ra trên màn hình iPhone cho phép nhập tên món ăn. Bàn phím này đã được cấu hình với phím “Done” và chỉ khi trong Text field có dữ liệu thì phím “Done” mới hoạt động (enable). Hoạt động cụ thể của phím “Done” này tuỳ thuộc vào nhu cầu phức tạp của người sử dụng, do vậy Swift không thể viết trước chức năng xử lý cho nó, mà sẽ thực hiện với cơ chế Uỷ quyền như đã đề cập trong chương 1.

Hãy tạo một biến liên kết code dạng tham chiếu có tên txtFoodName với đối tượng

Text field này! Để có thể thực hiện cơ chế uỷ quyền của đối tượng TextField với lớp ViewController, hãy thực hiện các bước sau:

Bước 1: Cho lớp ViewController thực hiện Protocol UITextFieldDelegate

class ViewController: UIViewController, UITextFieldDelegate {…

Bước 2: Thực hiện việc uỷ quyền trong hàm viewDidLoad():

override func viewDidLoad() {

super.viewDidLoad()

// Delegation of the TextField txtFoodName.delegate = self }

Bước 3: Tiến hành viết các hàm đã được uỷ quyền xử lý: Với Textfield có 8 phương

thức được uỷ quyền. Với ứng dụng này chúng ta sẽ định nghĩa cho hai phương thức sau: textFieldShouldReturn(_ textField: UITextField) -> Bool

textFieldDidEndEditing(_ textField: UITextField)

Trước tiên cần hiểu rõ hoạt động của đối tượng TextField: Mỗi khi người sử dụng tạp trên đối tượng TextField, nó sẽ tự động trở thành “The first responder” (Nghĩa là đối tượng được ưu tiên đầu tiên trong việc tiếp nhận các sự kiện như key events, motion

events, action messages, …) và khi đó iOS sẽ hiển thị bàn phím để bắt đầu soạn thảo.

Mỗi khi người dùng muốn kết thúc việc soạn thảo (gõ return hoặc tap vào phím “Done” trên bàn phím máy iPhone => Phương thức textFieldShouldReturn sẽ được gọi) thì Textfield cần thốt khỏi trạng thái ưu tiên đó:

//MARK: Textfield Delegate Functions

func textFieldShouldReturn(_ textField: UITextField) -> Bool { // Hide the keyboard

txtFoodName.resignFirstResponder()

return true // Luôn xử lý mỗi khi người dùng tap “Done” }

Ngoài ra, mỗi khi người dùng kết thúc việc soạn thảo, thì dữ liệu đã nhập sẽ được hiển thị ra màn hình Console (Tạm thời). Phương thức textFieldDidEndEditing sẽ được gọi ngay sau khi phương thức textFieldShouldReturn được gọi:

func textFieldDidEndEditing(_ textField: UITextField) {

print("Name of the Food is \(textField.text!)") }

76

Bài tập: Hãy thực hiện chương trình và cho nhận xét! Xử lý sự kiện cho đối tượng ImageView:

Trong iOS, các đối tượng giao diện View được chia thành hai loại là các Views và các

Controls. Điểm khác biệt giữa chúng là khả năng tương tác với người sử dụng: Các đối

tượng là View khi liên kết code chúng ta chỉ có thể liên kết dưới dạng tham chiếu (khơng có liên kết dưới dạng hành vi – Action) và như vậy không thể xử lý trực tiếp các thao tác tương tác (như tap, kéo thả, …) của người sử dụng. Ngược lại, các đối tượng Controls cho phép chúng ta có thể liên kết code cả hai dạng tham chiếu và hành vi (như đã làm với các Button, textfield…). Có thể hiểu Control như một trường hợp đặc biệt của view. Trong ứng dụng này, chúng ta muốn mỗi khi người dùng Tap vào vùng của ImageView sẽ cho phép gọi đến hàm thực hiện việc tìm và lựa chọn một ảnh bất kỳ từ thư mục ảnh của iPhone. Tuy nhiên, ImageView lại là một loại View chứ không phải một Control, nên ta chỉ có thể tạo các liên kết code dạng tham chiếu, còn các liên kết code kiểu hành vi thì cần phải thực hiện gián tiếp thơng qua một đối tượng Gesture Recognizer. Đối tượng Gesture Recognizer này có thể được “gắn” với một view bất

kỳ và sẽ nhận trực tiếp các sự kiện tương tác từ người dùng thay cho đối tượng View, nhận dạng các hành vi đó (Tap, swipe, pinch, rotation…) và thực hiện các hành vi tương ứng (Nghĩa là nó đã biến một view giống như một Control).

Bước 1: Trước tiên, chúng ta tạo liên kết code dạng tham chiếu với đối tượng imageview

(với tên mealImage) để có thể thay đổi image của nó thành ảnh mới lấy từ thư viện ảnh:

@IBOutlet weak var mealImage: UIImageView!

Bước 2: Tạo liên kết code hành vi gián tiếp thông qua Gesture Recognizer.

Trước tiên lựa chọn đối tượng ImageView, tìm đến Attributes Inspector và đánh chọn vào lựa chọn . Điều này sẽ cho phép đối tượng ImageView có thể đón nhận các tương tác từ người dùng.

Tiếp theo, thêm đối tượng Gesture Recognizer cho ImageView dựa trên các thao tác sau: Tìm trong thư viện đối tượng UITapGestureRecognizer (Có thể nhận dạng hành vi Tap của người dùng) => Kéo và thả lên trên ImageView. Hãy để ý trên thanh điều khiển của máy ảo xuất hiện thêm đối tượng Tap Gesture Recognizer (Hình 2.5.2.2).

Một phần của tài liệu Giáo trình lập trình di động trên iOS Dành cho bậc Cao đẳng (Trang 81 - 85)

Tải bản đầy đủ (PDF)

(137 trang)