UISearchDisplayController Replacement with UISearchController

ผมเคยกล่าวถึง UISearchController ไปแล้วใน Blog นี้ iOS 8 Presentation Controller ก็เป็นการเปลี่ยนแปลงที่กระทบต่อหลาย App เลยที่เคยใช้ UISearchDisplayController เพราะโค้ดเก่าก็ใช้ไม่ได้ เนื่องจากมัน Deprecated ไปเลย

Diagram ในการใช้งาน UISearchDisplayController


Diagram ในการใช้งาน UISearchController

คราวนี้อย่างที่บอกว่า UISearchController เป็นของใหม่ที่ดีมาก เนื่องจากเราไม่ต้องแสดงผลเป็น UITableView เท่านั้นอีกต่อไป แล้วถ้าเราไม่อยากเปลี่ยนพฤติกรรมมันละ ถ้าแค่อัพเดท App ให้ใช้งานได้บน iOS 8 โดยฟังก์ชั่นการค้นหายังอยู่ จะต้องทำอะไรบ้าง...

เรื่องแรกก็คือ Apple ยังไม่ได้ใส่ UISearchController เข้ามาแทนที่ UISearchDisplayController ที่อยู่บน Interface Builder ดังนั้นเราต้องโค้ดเอาทั้งหมด โดย App ที่จะนำมาเป็นตัวอย่างวันนี้แค่ Toy Project ง่ายๆ ที่จะแสดงรายชื่อประเทศทั้งหมด และเราสามารถค้นหาได้ตามอักษรนำหน้า มาเริ่มกันเลย

ขั้นแรกก็ประกาศ UISearchController ขึ้นมาก่อน พร้อม Array ของรายชื่อประเทศทั้งก่อนและหลังจากการค้นหาแล้ว


จากนั้นก็ทำตั้งค่า Search Controller ของเราตามนี้ แล้วเรียกใช้ใน -viewDidLoad

  • เราจะบอก Search Controller ว่าเราไม่มี Result View Controller เนื่องจากเราจะให้มันแสดงผลด้วย UITableView อันเดิม ซึ่งจะทำให้พฤติกรรมยังคงเหมือน UISearchDisplayController นั่นเอง
  • นี่คือสิ่งที่เพิ่มเข้ามา เป็นฟังก์ชั่นที่จะถูกเรียกเมื่อมีการค้นหาเกิดขึ้น ถูกเรียกว่า Updater
  • ต้องตั้งค่าตัวนี้เป็น false ถ้าจะแสดงผลลัพธ์ของการค้นหาบน UITableView อันเดิม เป้นการสร้างพื้นที่สีเทาขึ้นมาบัง UITableView ต้นทางไว้เพื่อแสดง Result View Controller
  • ตั้งค่าปุ่ม Scope
  • ตั้งเป็น Delegate ของทั้ง Search Controller และ Search Bar
  • จากนั้นใส่ Search Bar ให้เป็น Header View ของ UITableView



** ถ้าพบปัญหาว่า SearchBar ไม่ขึ้น ให้ลองตรวจสอบความสูงของ SearchBar ถ้าเป็น 0 ให้เรียกใช้ฟังก์ชั่น -sizeToFit กับ SearchBar ของ SearchController ด้วย

คราวนี้ก็มาถึงการจัดการการค้นหาแล้วล่ะ สิ่งที่เราต้องทำก็คือเขียนฟังก์ชั่นที่จะทำการกรองผลลัพธ์จากการค้นหา และฟังก์ชั่นในการจัดการเมื่อ Search Controller, Search Bar มีการใช้งาน เท่านั้นเอง


เท่านี้เอง เหมือนจะเขียนง่ายกว่าเดิมนะ
ใครยังงงๆ ก็ลองดูโค้ดตัวอย่างได้ที่นี่: https://github.com/macbaszii/SearchController

Popular posts from this blog

[Android Dev] การติดตั้ง Eclipse+AndroidSDK เพื่อพัฒนาโปรแกรมบน Android

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

5 TED Talk ที่จะช่วยให้คุณทำงานดีขึ้น