Pushing edit view
Last updated
Last updated
รู้สึกแปลก ๆ ไหมเวลาเรากดดู Detail หรือจะ edit แล้วมันเปิดขึ้นมาเต็มจอแบบหน้า Add ทั้ง ที่มีเครื่องหมายชี้ออกไปด้ายขวา (>)
เราจะมาแก้ให้มันเลื่อนเข้ามาจากทางขวาแทน แบบในแอพ Setting
เราต้องแก้ Segue ของเราก่อนโดยลบ openEditItemSegue เดิมออกก่อน
ลาก Segue ใหม่จาก TodoListViewController ไปยัง ItemDetailViewController โดยการกด Ctrl ค้างแล้วลากจากปุ่มเหลือง ๆ บน TodoListViewController ไปหน้า ItemDetailViewController เลือก Manual Segue เป็น Show
ตั้ง identifier ให้ segue เป็นชื่อเดิม openEditItemSegue
จากนั้นแก้โค้ดส่วน prepare(for:sender:) ส่วน openEditItemSegue ให้ cast destination เป็น ItemDetailViewController แทน UINavigationController
เพราะ destination ของ segue ไม่ได้ชี้ที่ UINavigationController แล้ว
จากนั้นเมื่อรันแล้วจะพบว่า หน้า edit จะ push เข้ามาจากทางขวามือแล้ว แต่เมื่อเรากด Cancel หรือ Done จะไม่สามารถใช้งานได้ นั่นเพราะเมื่อเราไม่ได้เปิดแบบ Modal แล้วเราจะไม่สามารถ dismiss viewController ได้
Navigation Controller จะทำงานในลักษณะ Stack เมื่อเราเปิดหน้าใหม่ NavigationController จะ Push หน้าใหม่เข้ามา ดังนั้นเพื่อให้ปิดหน้า edit เราจึงจะต้อง Pop ออกจาก NavigationController
ให้เราเปลี่ยนเป็น popViewController จากเดิมที่สั่ง dismiss controller ในส่วนของ itemDetailViewController(controller:didEdit:)
และใน itemDetailViewControllerDidCancel(controller:) เมื่อเป็นการ cancel จาก edit
IsInEditMode ใน ItemDetailViewController.swift คือตรวจว่ามี todoItem หรือไม่
เสร็จเรียบร้อย Push Pop ถูกต้อง