🖥️
iOS App with Pop
UIKit Swift 5
UIKit Swift 5
  • iOS App development
  • Swift
    • Variable & Constant
    • Number & String
    • Operator
    • Array, Dictionary & Tuple
    • Enum
    • Optional
    • Function
    • Class & Struct
    • Branching
    • Loops
    • Error handler
    • Protocol
    • Extension
  • Create New Project
  • Introduction to Xcode
  • Scene-Based Life-Cycle
  • UIViewController
  • Storyboard
  • First Run
  • Display todo list
  • Basic Auto Layout
  • MVC
  • Model
  • Binding TableView
  • Binding TableViewCell
  • TableViewDelegate
  • Add navigationBar with + button
  • Add new item page
  • TextField and Switch
  • Binding action
  • Add mock item to todo list
  • What is weak?
  • Finish add item
  • Delete todo item
  • Edit todo item
  • Custom new layout
  • Adding new delegate
  • Refactor
  • Pushing edit view
  • Large navigation
  • Drag item
  • Drop item (in app)
  • Save data
  • Where to go from here?
Powered by GitBook
On this page
  • เอาค่าที่กรอกมาเพิ่มสิ
  • Adjust UX

Finish add item

PreviousWhat is weak?NextDelete todo item

Last updated 2 years ago

เอาค่าที่กรอกมาเพิ่มสิ

ตอนนี้เราเพิ่ม todo item ได้ละ แต่เพิ่มเป็น Test หมดเลย ต่อไปเราจะใช้ค่าที่ผู้ใช้กรอกเข้ามาจริง ๆ ละ

เริ่มจากการผูก Outlet เพื่ออ่านค่า property ของ view ทั้งสองอันคือ TextField และ Switch

วิธีการแบบเดียวกันกับตอนที่เราผูก Action เลยเพียงแต่ตอนนี้ให้เลือกเป็น Outlet และตั้งชื่อว่า titleTextField กับ isDoneSwitch

จะได้โค้ดแบบนี้เพิ่มมา

@IBOutlet weak var titleTextField: UITextField!
@IBOutlet weak var isDoneSwitch: UISwitch!

จากนั้นเราก็แก้ doneButtonDidTap(_:) ให้อ่านค่าจาก Outlet ทั้งสองตัวเป็นอันจบ

@IBAction func doneButtonDidTap(_ sender: UIBarButtonItem) {
    if let title = titleTextField.text, !title.isEmpty {
        let todoItem = TodoItem(title: title, isDone: isDoneSwitch.isOn)
        delegate?.addNewItemViewController(controller: self, didAdd: todoItem)
    }
}

จากโค้ดจะเห็นว่า เรามี check empty ด้วย ถ้า TextField ยังว่างอยู่จะไม่ add ให้

Adjust UX

เพื่อให้ผู้ใช้สะดวกขึ้น เรามาให้โฟกัสเปิดแป้นพิมพ์อัตโนมัติหลังจากเข้าหน้า ผู้ใช้จะได้ไม่ต้องมาแตะที่ช่องอีกรอบ โดยการเพิ่ม titleTextField.becomeFirstResponder() หลังจากที่หน้าจอแสดงเสร็จแล้ว

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    titleTextField.becomeFirstResponder()
}

โค้ดสุดท้ายหลังจบบทนี้

AddNewItemViewController.swift
import UIKit

protocol AddNewItemViewControllerDelegate: AnyObject {
    func addNewItemViewController(controller: AddNewItemViewController, didAdd item: TodoItem)
    func addNewItemViewControllerDidCancel(controller: AddNewItemViewController)
}

class AddNewItemViewController: UIViewController {

    weak var delegate: AddNewItemViewControllerDelegate?

    @IBOutlet weak var titleTextField: UITextField!
    @IBOutlet weak var isDoneSwitch: UISwitch!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        titleTextField.becomeFirstResponder()
    }
    
    @IBAction func doneButtonDidTap(_ sender: UIBarButtonItem) {
        if let title = titleTextField.text, !title.isEmpty {
            let todoItem = TodoItem(title: title, isDone: isDoneSwitch.isOn)
            delegate?.addNewItemViewController(controller: self, didAdd: todoItem)
        }
    }

    @IBAction func cancelButtonDidTap(_ sender: UIBarButtonItem) {
        delegate?.addNewItemViewControllerDidCancel(controller: self)
    }

}