วันศุกร์ที่ 18 มีนาคม พ.ศ. 2554

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 :)

ไม่มีความคิดเห็น:

แสดงความคิดเห็น