Custom UIActivity for UIActivityViewController


UIActivityViewController เป็น View Controller สำหรับทำ action หรือ share สำหรับ Content ที่เราส่งไป เช่น Tweet, Post to Facebook, Copy to Clipboard และอื่นๆ ซึ่งวิธีการใช้งานก็ง่ายมากเลย


เท่านี้เอง โดย View Controller ก็จะมี action ที่จะขึ้นมาเป็น default ซึ่งจะแสดงทั้งหมด ซึ่งเราสามารถนำอันที่เราไม่ต้องการออกได้โดยการทำแบบนี้




โดยใน iOS 7 นั้น เราจะเห็นว่ามันแบ่งออกเป็น 2 แบบนั่นคือ Action Type (ด้านล่าง) และ Share Type (ด้านบน) ซึ่งที่ Blog วันนี้ เราจะมา Custom UIActivity ในส่วนของ Action Type กันนะ (จริงๆ แล้วก็ไม่ต่างกัน สำหรับทั้ง 2 Type เพียงแต่ผมยังหาวิธีทำ Icon ในส่วนของ Share Type ไม่ได้ - -' แล้วก็ไม่เจอใครทำได้ด้วยนะ)

สิ่งที่เราจะมาทำคือ "Open in Safari" ซึ่งเป็น Action ง่ายๆ ที่ผมก็สงสัยว่า ทำไมมันถึงไม่มีมาให้เลยนะ
(ที่ผมเขียนคือ จะเป็นการเปิด URL แรกที่เจอใน UIActivityItems นะ)

ขั้นแรกก็สร้าง Class เป็น UIActivity Subclass 


แล้วประกาศ Property สำหรับรูปภาพที่จะแสดงบน UIActivityViewController และตัวแปรที่จะเก็บ URL แรกที่เจอ (ในที่นี้ผมจัดการใน Private Interface ของ Class นะ)


จากนั้นก็ทำการ Override method ของ UIActivity ที่จะใช้งาน เท่าที่ต้องใช้ก็มีเท่านี้ครับ (สามารถดูเพิ่มเติมได้ด้วยการกด cmd แล้วคลิกเข้าไปที่ UIActivity)


โดยเมื่อดูแล้ว สิ่งที่จำเป็นต้อง Implement ได้แก่
  • activityImage จะเป็น property ที่จะชี้ไปยังรูปที่จะแสดงบน UIActivityViewController โดยภาพที่จะใช้ต้องเป็นภาพซิลูเอท (ได้ศัพท์มาจาก Designer) คือภาพที่ส่วน Tranparent จะโดนถมสีอัตโนมัติ และมีขนาด 60 x 60 points

  • +activityCategory จะเป็น method ที่จะบอกว่าเป็น action หรือ share type (ด้านล่างหรือด้านบนนั่นเอง)
  • -activityType จะเป็น method ที่บอก type ของ UIActivity ที่เราจะสร้าง โดยผมประกาศเป็น static constant ไว้ด้านบน
  • -activityTitle จะเป็น method ที่บอกข้อความใต้รูปที่จะแสดงบน UIActivityViewController
  • -canPerformWithActivityItems เป็น method ที่จะเช็ค activityItems ที่รับเข้ามาว่าถูกต้อง สำหรับ activity ที่เราสร้างขึ้นหรือไม่ (ถูกต้องหรือไม่ เช่นในที่นี้ทำการตรวจสอบว่า activityItems ที่ส่งเข้ามามี URL อยู่หรือไม่ ? ถ้าไม่มีก็จะไม่แสดง "Open in Safari" ใน UIActivityViewController ที่ขึ้นมา ซึ่งสามารถ return YES ได้เลยนะ ถ้ามั่นใจว่าค่าที่ส่งมาถูกต้องแน่นอน)
  • -prepareWithActivityItems เป็น method ที่เราจะทำการเขียน action เมื่อเรากดที่ activity ที่สร้างขึ้น ในที่นี้ก็แค่เปิด Safari ด้วย URL ที่ส่งเข้ามา แค่นั้นเองครับ :)
คราวนี้ก็แค่เอา activity ที่สร้างขึ้นไปใช้งาน ง่ายๆ ตามนี้เลย


เท่านี้ก็เรียบร้อย (ไม่เห็นทั้งหมด เพราะนี่รันบน iPhone Simulator นะครัช)


ใครที่อ่านจบมาถึงตรงนี้ล่ะก็.... เก่งมาก... ไม่ใช่แค่นั้น เอารางวัลไปด้วยเบย

Popular posts from this blog

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

"อีสุกอีใส" ประสบการณ์เมื่อต้องมาเป็นตอนอายุ 22

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