iPhone: Hide Keyboard


Hide Keyboard

การเขียนโปรแกรมกับ UI บนไอโฟน ปัญหาแรกๆ ที่เราพบกันบ่อยมากคือ จะเอา keyboard ซ่อนอย่างไร วิธีที่ง่ายๆ คือใช้ฟังก์ชั่น ResignFirstResponse กับตัว TextField ของเราโดยการกำหนดอีเวนท์ให้กับ TextField แต่!!! วิธีนั้นเป็นแค่วิธีขั้นพื้นฐาน วันนี้ผมนำเสนอวิธีที่เหนือชั้นกว่านั้น ไม่ต้องใช้ ResignFirstResponse เจาะจงไปตัวใดตัวหนึ่ง, ไม่ต้องมีการกำหนดอีเวนท์, TextView ก้อใช้ได้ ม่ะมาดูกัน

จากหลัก HCI ง่ายๆ เมื่อผู้ใช้ใส่ข้อความหรือหลงไปกดที่ช่องข้อความ และ keyboard ดันขึ้น (แล้วเราจะทำอย่างไรต่อ??) ผู้ใช้มักจะกดที่พื้นหลังเพื่อให้ keyboard มันหายไป แต่หากโปรแกรมไม่ได้เขียนดักอีเวนท์การกดพื้นหลัง (UIView) ไว้แล้วหละก้อจะไม่มีทางทำให้ keyboard หายได้เลย เราจะมาเรียนรู้การแก้ไขทำได้อย่างไร

ขั้นตอน

1. กำหนดค่า User Interaction ให้กับ UIView ใน UI ของเรา (ผมทดลองด้วยการใช้ layout แบบไม่ซับซ้อนนะครับ)

เลือกที่ View ไปที่เมนู View -> Interaction -> เลือก User Interaction Enabled

2. เขียนฟังก์ชั่น -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event ในคลาสของ UIViewController  ของเรา ฟังก์ชั่นนี้จะเป็นโอเวอร์ไลด์ฟังก์ชั่นของ UIView เขียนเพื่อรับอีเวนท์ตอนเริ่มต้นแตะ UIView (self.view)

code:

 

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
     UITouch *touch = [touches anyObject];
     if(touch.phase==UITouchPhaseBegan){
         //find first response view
         for (UIView *view in [self.view subviews]) {
             if ([view isFirstResponder]) {
                 [view resignFirstResponder];
                 break;
             }
         }
     }
}

เพิ่มเติม [view isFirstResponder] เป็นการตรวจสอบว่า view นั้นเป็น first responder หรือไม่ หากใส่เราจะปลดค่าการเป็น first responder ของมันออกไปด้วยฟังก์ชั่นที่รู้จักกันดีคือ [view resignFirstResponder]

เพียงเท่านี้ ไม่ว่าผู้ใช้จะหลงกด TextView หรือ TextField เราก้อสามารถทำให้ keyboard ซ่อนไปด้วยการกดที่พื้นหลัง แต่หากเราจะเขียนอีเวนท์เพื่อเข้าไปก็ได้นะครับ คืออีเวนท์เมื่อ edit เสร็จแล้วของ TextField ทำเอาไว้หลายๆ ทาง

Reference

adaydesign :)

About adaydesign

นักพัฒนาแอพพลิเคชั่นบนโมบาย [iPhone Android] คนหนึ่งซึ่งอยากจะบันทึกเรื่องราวของเส้นทางนักพัฒนาโมบายแอพพลิเคชั่นเอาไว้ในบล็อคน้อยๆ แห่งนี้ เผื่อจะแบ่งบันและแลกเปลี่ยนความรู้ให้กับคนอื่นๆ ได้บ้าง :) Mobile Application Developer; Flash Mobile, iPhone/iPad, Android Mobile Phone/Tablet and Blackberry Playbook.

Posted on มีนาคม 18, 2011, in [Dev] iOS and tagged , , , , , , , , . Bookmark the permalink. 2 ความเห็น.

  1. ขอบพระคุณมากครับ T^T

    ไม่ได้คำแนะนำจากหน้านี้ ผมคงติดนานกว่านี้ ขอบคุณครับผม

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: