UISearchDisplayController Replacement with UISearchController
ผมเคยกล่าวถึง UISearchController ไปแล้วใน Blog นี้ iOS 8 Presentation Controller ก็เป็นการเปลี่ยนแปลงที่กระทบต่อหลาย App เลยที่เคยใช้ UISearchDisplayController เพราะโค้ดเก่าก็ใช้ไม่ได้ เนื่องจากมัน Deprecated ไปเลย
คราวนี้อย่างที่บอกว่า UISearchController เป็นของใหม่ที่ดีมาก เนื่องจากเราไม่ต้องแสดงผลเป็น UITableView เท่านั้นอีกต่อไป แล้วถ้าเราไม่อยากเปลี่ยนพฤติกรรมมันละ ถ้าแค่อัพเดท App ให้ใช้งานได้บน iOS 8 โดยฟังก์ชั่นการค้นหายังอยู่ จะต้องทำอะไรบ้าง...
เรื่องแรกก็คือ Apple ยังไม่ได้ใส่ UISearchController เข้ามาแทนที่ UISearchDisplayController ที่อยู่บน Interface Builder ดังนั้นเราต้องโค้ดเอาทั้งหมด โดย App ที่จะนำมาเป็นตัวอย่างวันนี้แค่ Toy Project ง่ายๆ ที่จะแสดงรายชื่อประเทศทั้งหมด และเราสามารถค้นหาได้ตามอักษรนำหน้า มาเริ่มกันเลย
ขั้นแรกก็ประกาศ UISearchController ขึ้นมาก่อน พร้อม Array ของรายชื่อประเทศทั้งก่อนและหลังจากการค้นหาแล้ว
จากนั้นก็ทำตั้งค่า Search Controller ของเราตามนี้ แล้วเรียกใช้ใน -viewDidLoad
** ถ้าพบปัญหาว่า SearchBar ไม่ขึ้น ให้ลองตรวจสอบความสูงของ SearchBar ถ้าเป็น 0 ให้เรียกใช้ฟังก์ชั่น -sizeToFit กับ SearchBar ของ SearchController ด้วย
คราวนี้ก็มาถึงการจัดการการค้นหาแล้วล่ะ สิ่งที่เราต้องทำก็คือเขียนฟังก์ชั่นที่จะทำการกรองผลลัพธ์จากการค้นหา และฟังก์ชั่นในการจัดการเมื่อ Search Controller, Search Bar มีการใช้งาน เท่านั้นเอง
เท่านี้เอง เหมือนจะเขียนง่ายกว่าเดิมนะ
ใครยังงงๆ ก็ลองดูโค้ดตัวอย่างได้ที่นี่: https://github.com/macbaszii/SearchController
![]() |
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
Comments
Post a Comment