PracticU

UITextFieldDismissKeyboard - Dismissing the keyboard

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode › UITextFieldDismissKeyboard - Dismissing the keyboard
מילון מושגים:
כפתור - רכיב בממשק המשתמש שהמשתמש לוחץ עליו כדי להפעיל פעולה, כמו שליחת טופס או מעבר לדף אחר.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
קונטרולר - רכיב שמתווך בין הממשק לבין הלוגיקה והנתונים, מקבל בקשות ומחליט כיצד לטפל בהן (למשל בדפוס MVC).
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
אירוע - התרחשות שהמערכת מזהה ויכולה להגיב לה, כמו לחיצת עכבר, הקשה או סיום פעולה.
גופן - העיצוב הגרפי של האותיות והתווים המוצגים בטקסט, הכולל צורה, סגנון וגודל.
סיסמה - מחרוזת תווים סודית שמשמשת לאימות זהות המשתמש בעת כניסה למערכת. ככל שהיא ארוכה ומורכבת יותר, כך קשה יותר לנחש אותה.

UITextFieldDismissKeyboard - Dismissing the keyboard
בשיעור לומדים לסגור את המקלדת כשהיא מכסה שדות טקסט על המסך. הבעיה מופיעה כשהשדות נמצאים בתחתית המסך, ולכן המקלדת מכסה אותם. התרגיל מציג כמה דרכים לשחרר את המקלדת.
הבעיה
- מסך עם ארבעה שדות טקסט וכפתור, מוטמעים ב-Stack View. בהרצה ראשונה, לחיצה על שדה תחתון מציגה מקלדת שמכסה את הפקדים.
- המרצה מציין שעדיף להימנע ממצב כזה מלכתחילה, אבל ההדגמה מציגה את הפתרונות.
פתרון ראשון: resignFirstResponder על שדה אחד
- בכל מחלקה של View Controller אפשר לממש touchesBegan, שמופעלת בכל נגיעה במסך.
- בתוכה קוראים ל-resignFirstResponder על השדה שמחזיק את המקלדת. הפתרון עובד רק לשדה אחד, ולכן אינו מספיק כשיש כמה שדות.
פתרון שני: פונקציה רקורסיבית
1. כותבים פונקציה hideKeyboard שמקבלת View.
2. עוברים על כל subviews של ה-View. אם הילד הוא UITextField, קוראים לו resignFirstResponder.
3. אם הילד אינו שדה טקסט, הפונקציה קוראת לעצמה עם הילד, כך שהחיפוש חודר לכל רמה של ה-View.
פתרון שלישי: endEditing
- הפעולה view.endEditing(true) עושה את אותו דבר בשורה אחת. היא מחפשת את השדה שמחזיק את המקלדת ומשחררת אותו.
אירועים נוספים של שדה טקסט
- ניתן לחבר Action נוסף מסוג Editing Changed, שמופעל בכל הקלדה.
- התכונות של השדה כוללות placeholder, בורדר, גודל פונט, סוג מקלדת, Secure Text Entry לסיסמאות, וסוג כפתור Return. בשיעור נבחר הכפתור Go.
הסיכום: אפשר לשחרר את המקלדת על ידי resignFirstResponder או endEditing, והמעבר על תת-הפקדים מאפשר לטפל בכל השדות בבת אחת.
השיעור הבא בקורס: UITextField - UITextFieldDelegate Intro And Return Button

פרקי ההרצאה: UITextFieldDismissKeyboard - Dismissing the keyboard

  1. 00:00

    מבוא: UI TextField וסגירת המקלדת

  2. 00:45

    ממשק עם ארבעה שדות וכפתור

  3. 02:43

    בעיית המקלדת שמכסה את המסך

  4. 03:21

    שחרור המקלדת בלחיצה על המסך

  5. 04:24

    Resign First Responder לשדה

  6. 05:43

    פונקציה hideKeyboard לשחרור המקלדת

  7. 07:00

    מעבר רקורסיבי על תתי-הפקדים

  8. 08:10

    בדיקה אם התת-פקד הוא שדה טקסט

תמלול ההרצאה: UITextFieldDismissKeyboard - Dismissing the keyboard

הטקסט המלא של הדקות הראשונות בהרצאה «UITextFieldDismissKeyboard - Dismissing the keyboard» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    שלום וברוכים הבאים אנחנו רוצים להעשיר את עצמנו ולהרחיב קצת את הידע על פקדים נוספים היום אנחנו נרחיב קצת על UI טקסט פילד בואו נצא לדרך אנחנו מייצרים פרויקט חדש מסוג סינגל וי אפליקיישן ואנחנו נקרא לפרויקט שלנו טקסט פילד דמו בסדר כי אנחנו באמת רוצים ללמוד הרבה על טקסט פילד מעבר למה שהעין מגלה לנו מיד כשאנחנו מסתכלים עליהם יופי איפה אנחנו שומרים את הפרויקט נשמור אותו במקום הרגיל

  2. 00:33

    ובואו נצא לדרך. מבחינת UI אני רוצה לסדר פה איזשהו מצב שהוא בעייתי בכוונה כדי להדגים לכם איך פותרים אותו, אז בואו נצא לדרך, בואו נסתכל.

  3. 00:52

    אני ניגש שנייה לסטורי בורד שלי, ובסטורי בורד אנחנו רוצים לפתוח את ה-Object Explorer ולהוסיף כמה טקסט פילדים, איך ניחשנו, יפה, אז טקסט פילד אחד למשל, נשים אותו על כאן, נשים מתחתיו עוד אחד, נשים עוד אחד, גם כפתור, אנחנו נצטרך לחזור ל-object-library ולהביא כפתור.

  4. 01:28

    נגיד שהכפתור הזה אומר סיימתי, כן? עכשיו הנה ארבעת הטקסטפילדים והכפתור ואנחנו רוצים כדי לקצר את העניין לשים את כולם בסטאק אז סימנתי את כל ארבעת הפקדים אחד אחרי השני עם שיפט או שהם שמים פה למעלה גם כן עם שיפט ולחצנו פה על ה-Embed in StackView StackView כידוע לנו צריכים אילוצים אז על ה-StackView היחיד שיש לי אני הולך ובוחר להוסיף אילוצים

  5. 01:57

    ואני אבחר להוסיף פשוט תירוצים לשלושת הכיוונים בשיעור של נניח 32 פה גם וגם יפה עכשיו איך הפקדים צריכים להסתדר בתוך הסטאק אתם שואלים אז אנחנו נרצה שיהיה להם דיסטריביושן של פיל איקואלי ואליינמנט פיל וככה בעצם ארבע פקדים אחד מעל השני נכון so far so good אתם יכולים לומר ובצדק אין פה שום דבר מיוחד אבל בואו נראה מה קורה כשאנחנו מריצים את

  6. 02:36

    זה בכל אופן. אנחנו מפעילים ואנחנו רואים פה את הפקדים שלנו, לא הדוגמה הכי מצודדת לעין, אנחנו תמיד משתדלים להדגיש UI, אבל אנחנו פשוט רוצים להסתכל פה על מה שצריך להסתכל.

  7. 02:55

    אז הנה, עלתה המקלדת. וואו, מה עושים עכשיו, נכון? אנחנו רוצים להיפטר מהמקלדת כדי להמשיך לעבוד עם ה-UI. קודם כל, בואו אני אומר לכם את זה בצורה פשוטה, כדאי להימנע מלכתחילה ממצבים כאלה, בסדר אבל אם כבר נקלענו אליהם מה עושים נכון בוא נסגור את האפליקציה מה אתם אומרים כן אוקיי אז כן אז זאת הבעיה אז בואו נראה

  8. 03:19

    איך פותרים אותה בסדר בואו נעיף מבט כדי לפתור את הבעיה הזאת אנחנו נדגים כמה דרכים כמה אפשרויות אבל אנחנו רוצים לדעת נניח מתי לשחרר את הפקד בואו נאמר שאנחנו רוצים לשחרר אותה אם לחצו על הview controller פה למעלה פה בסדר איך נעשה את זה אחת האפשרויות תהיה להזין לפעולה של

  9. 03:43

    View Controller שנקראת Touches Begin. כן, Touches Begin, אז כאילו התחילו לגעת עם האצבע על המסך, ווהו, בואו נראה, ווהו, אני אריץ, לוחץ פה על איזשהו פקד לא קשור, לוחץ פה, וואלה, ווהו.

  10. 04:07

    מגניב, אז יש לי בעצם האזנה למקום הזה, נכון? עדיין אפליקציה קצת בעייתית, אבל אנחנו לפחות מאזינים.

  11. 04:15

    אוקיי, כדי לשחרר את הפקד, אחת האפשרויות תהיה לדעת מי הפקד שבגללו יש מקלדת. הפקד שבגללו יש מקלדת נקרא first responder ואנחנו רוצים לומר לפקד הזה לשחרר את המצב בסדר לדוגמה יש לי פה את הטקסט פילד הזה ואני יכול לפתוח את האסיסטמנט אדיטור ולגרור אאוטלט

  12. 04:25

    בסדר הנה סתם דוגמה כן לא שזה יהיה הפתרון האולטימטיבי אבל אנחנו רוצים ללמוד אז אני אקרא לזה טקסט אחד יפה כדי לגרום לטקסט 1 לשחרר את המקלדת אנחנו אומרים לטקסט 1 שהתפטר מתפקידו כ-First Respander כלומר Resign First Respander בוא נבדוק.

  13. 05:13

    בוא נבדוק אז טקסט 1 הוא האשם בתפיסת המקלדת לוחץ פה טקסט 1 משחרר יפה אבל מה קורה כשטקסט 2 הוא האשם בפקידת המקלדת נכון לא עובד רואים נורא מעצבן אנחנו עכשיו יכולים לעשות את אותו טריק כמו לגרור עוד outlet לטקסט 2 ולהגיד גם לא להיות כן זה קצת מעיק עכשיו אני רוצה ללמד אתכם דרך אחת לפתור את העניין הזה זו דרך מעניינת

  14. 05:47

    ואנחנו אחר כך נראה דרך נוספת ודרך נוספת ככה אנחנו מתקדמים נכון לומדים ולומדים אז דבר ראשון הוא הולך לview controller ואני אראה לכם שיטה נחמדה שנקראת hide keyboard הייד קיבור היא לא מחזירה ערך סליחה הייד קיבור היא פאנקשן שלא מחזירה ערך ובוא נקרא לה הייד

  15. 06:07

    קיבור עכשיו מה שהיא מקבלת זה פקד מסוג ui view פקד משחרר את המקלדת הוא עושה רזיין פרסט רספנדר נכון אז כאילו בצורה הכי פשוטה היינו יכולים להגיד view נקודה רזיין פרסט רספנדר אוקיי העניין הוא שעכשיו אני צריך לקרוא לפעולה הזאת עבור כל הפקדים שיש לי למשל אני יכול להגיד הייד קיבור עבור טקסט אחד אוקיי זה בדיוק מה שעשיתי

  16. 06:45

    קודם רק בצורה קצת יותר ארוכה נכון אין טעם זה נראה מיותר ומטובש אלא אם כן יצא לנו מפה משהו נחמד אז בואו נראה איך אנחנו יכולים לשדרג את הגישה הזאת זאת הגישה זה הרעיון הכללי אבל מה שאנחנו רוצים להגיד זה אנחנו רוצים לבדוק את כל הפקדים של הויו שלנו אחד אחרי השני מה זאת אומרת זאת אומרת שבכל ויו קונטרולר יש תכונה אחת שנקראת הויו והויו הזה של הויו קונטרולר בטח אתם ראינו את זה כבר זה ה-view

  17. 07:15

    הזה הראשי ובתוך ה-view הזה יש הרבה ילדים ולילדים האלה אולי יש עוד ילדים למשל ל-stack view הזה יש עוד ילדים בפנים נכון ל-view יש ילדים הילד שלו זה ה-stack view ול-stack view יש ילדים הילדים שלו הם הטקסט פילדים אז מה שאני רוצה לעשות אני רוצה לעבור בצורה רקורסיבית מ-view לבנו מבנו

  18. 07:36

    לבניו עד שאני מוצא טקסט פילדים ואז אני אומר להם לשחרר את ה first responder בוא נראה זה דווקא קטע יפה בתכנון איך נעשה את זה קודם כל נגיד להם ללכת לפעולה הרקורסיבית שהייתי עוד מעט שיצרנו נגיד לפעולה הזאת שתיקח את הview שלנו בסדר עכשיו אוקיי דבר שני אנחנו נעשה את הדבר הבא עבור כל ילד מהילדים של הview איך נעשה את הפעולה הזאת

  19. 08:10

    בוא נעשה ככה for child in view.subviews בסדר אז הנה יש לנו אפשרות לרוץ פה על כל העניין הזה אז יש לי כל פעם subview 1 בסדר באנדרואיד הם נקראים children נכון אז כאן הם subviews אוקיי מצוין אז הנה אני רץ עליהם אחד אחד עכשיו מה אני עושה אני אומר child.resign first responder לא נכון

  20. 08:43

    מה שאני רוצה לעשות אני רוצה לעשות או resign first responder או לרוץ על הילדים שלו גם כן אוקיי אז מה שאנחנו נעשה אנחנו נעשה דבר כזה אנחנו נבדוק אם ה-child is UI text field אז child.resign first responder ואם הוא לא text field נכון אז בוא נפעיל את הפעולה על הילדים שלו בסדר אז אם הוא לא text field נפעיל את הפעולה על הילדים

  21. 09:16

    שלו כלומר נקרא עוד הפעם ליד קיבורד עם ה-child

לקורס המלא: קורס פיתוח אפליקציות לאייפון

ההרצאה הקודמת: Hiding UIImages in a UIStackView and image Alpha for toggling On Off

ההרצאה הבאה: UITextField - UITextFieldDelegate Intro And Return Button

הרצאות קשורות מקורסים אחרים

  • Prevent Keyboard Auto Display

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון