
הטקסט המלא של הדקות הראשונות בהרצאה «UITextFieldDismissKeyboard - Dismissing the keyboard» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום וברוכים הבאים אנחנו רוצים להעשיר את עצמנו ולהרחיב קצת את הידע על פקדים נוספים היום אנחנו נרחיב קצת על UI טקסט פילד בואו נצא לדרך אנחנו מייצרים פרויקט חדש מסוג סינגל וי אפליקיישן ואנחנו נקרא לפרויקט שלנו טקסט פילד דמו בסדר כי אנחנו באמת רוצים ללמוד הרבה על טקסט פילד מעבר למה שהעין מגלה לנו מיד כשאנחנו מסתכלים עליהם יופי איפה אנחנו שומרים את הפרויקט נשמור אותו במקום הרגיל
ובואו נצא לדרך. מבחינת UI אני רוצה לסדר פה איזשהו מצב שהוא בעייתי בכוונה כדי להדגים לכם איך פותרים אותו, אז בואו נצא לדרך, בואו נסתכל.
אני ניגש שנייה לסטורי בורד שלי, ובסטורי בורד אנחנו רוצים לפתוח את ה-Object Explorer ולהוסיף כמה טקסט פילדים, איך ניחשנו, יפה, אז טקסט פילד אחד למשל, נשים אותו על כאן, נשים מתחתיו עוד אחד, נשים עוד אחד, גם כפתור, אנחנו נצטרך לחזור ל-object-library ולהביא כפתור.
נגיד שהכפתור הזה אומר סיימתי, כן? עכשיו הנה ארבעת הטקסטפילדים והכפתור ואנחנו רוצים כדי לקצר את העניין לשים את כולם בסטאק אז סימנתי את כל ארבעת הפקדים אחד אחרי השני עם שיפט או שהם שמים פה למעלה גם כן עם שיפט ולחצנו פה על ה-Embed in StackView StackView כידוע לנו צריכים אילוצים אז על ה-StackView היחיד שיש לי אני הולך ובוחר להוסיף אילוצים
ואני אבחר להוסיף פשוט תירוצים לשלושת הכיוונים בשיעור של נניח 32 פה גם וגם יפה עכשיו איך הפקדים צריכים להסתדר בתוך הסטאק אתם שואלים אז אנחנו נרצה שיהיה להם דיסטריביושן של פיל איקואלי ואליינמנט פיל וככה בעצם ארבע פקדים אחד מעל השני נכון so far so good אתם יכולים לומר ובצדק אין פה שום דבר מיוחד אבל בואו נראה מה קורה כשאנחנו מריצים את
זה בכל אופן. אנחנו מפעילים ואנחנו רואים פה את הפקדים שלנו, לא הדוגמה הכי מצודדת לעין, אנחנו תמיד משתדלים להדגיש UI, אבל אנחנו פשוט רוצים להסתכל פה על מה שצריך להסתכל.
אז הנה, עלתה המקלדת. וואו, מה עושים עכשיו, נכון? אנחנו רוצים להיפטר מהמקלדת כדי להמשיך לעבוד עם ה-UI. קודם כל, בואו אני אומר לכם את זה בצורה פשוטה, כדאי להימנע מלכתחילה ממצבים כאלה, בסדר אבל אם כבר נקלענו אליהם מה עושים נכון בוא נסגור את האפליקציה מה אתם אומרים כן אוקיי אז כן אז זאת הבעיה אז בואו נראה
איך פותרים אותה בסדר בואו נעיף מבט כדי לפתור את הבעיה הזאת אנחנו נדגים כמה דרכים כמה אפשרויות אבל אנחנו רוצים לדעת נניח מתי לשחרר את הפקד בואו נאמר שאנחנו רוצים לשחרר אותה אם לחצו על הview controller פה למעלה פה בסדר איך נעשה את זה אחת האפשרויות תהיה להזין לפעולה של
View Controller שנקראת Touches Begin. כן, Touches Begin, אז כאילו התחילו לגעת עם האצבע על המסך, ווהו, בואו נראה, ווהו, אני אריץ, לוחץ פה על איזשהו פקד לא קשור, לוחץ פה, וואלה, ווהו.
מגניב, אז יש לי בעצם האזנה למקום הזה, נכון? עדיין אפליקציה קצת בעייתית, אבל אנחנו לפחות מאזינים.
אוקיי, כדי לשחרר את הפקד, אחת האפשרויות תהיה לדעת מי הפקד שבגללו יש מקלדת. הפקד שבגללו יש מקלדת נקרא first responder ואנחנו רוצים לומר לפקד הזה לשחרר את המצב בסדר לדוגמה יש לי פה את הטקסט פילד הזה ואני יכול לפתוח את האסיסטמנט אדיטור ולגרור אאוטלט
בסדר הנה סתם דוגמה כן לא שזה יהיה הפתרון האולטימטיבי אבל אנחנו רוצים ללמוד אז אני אקרא לזה טקסט אחד יפה כדי לגרום לטקסט 1 לשחרר את המקלדת אנחנו אומרים לטקסט 1 שהתפטר מתפקידו כ-First Respander כלומר Resign First Respander בוא נבדוק.
בוא נבדוק אז טקסט 1 הוא האשם בתפיסת המקלדת לוחץ פה טקסט 1 משחרר יפה אבל מה קורה כשטקסט 2 הוא האשם בפקידת המקלדת נכון לא עובד רואים נורא מעצבן אנחנו עכשיו יכולים לעשות את אותו טריק כמו לגרור עוד outlet לטקסט 2 ולהגיד גם לא להיות כן זה קצת מעיק עכשיו אני רוצה ללמד אתכם דרך אחת לפתור את העניין הזה זו דרך מעניינת
ואנחנו אחר כך נראה דרך נוספת ודרך נוספת ככה אנחנו מתקדמים נכון לומדים ולומדים אז דבר ראשון הוא הולך לview controller ואני אראה לכם שיטה נחמדה שנקראת hide keyboard הייד קיבור היא לא מחזירה ערך סליחה הייד קיבור היא פאנקשן שלא מחזירה ערך ובוא נקרא לה הייד
קיבור עכשיו מה שהיא מקבלת זה פקד מסוג ui view פקד משחרר את המקלדת הוא עושה רזיין פרסט רספנדר נכון אז כאילו בצורה הכי פשוטה היינו יכולים להגיד view נקודה רזיין פרסט רספנדר אוקיי העניין הוא שעכשיו אני צריך לקרוא לפעולה הזאת עבור כל הפקדים שיש לי למשל אני יכול להגיד הייד קיבור עבור טקסט אחד אוקיי זה בדיוק מה שעשיתי
קודם רק בצורה קצת יותר ארוכה נכון אין טעם זה נראה מיותר ומטובש אלא אם כן יצא לנו מפה משהו נחמד אז בואו נראה איך אנחנו יכולים לשדרג את הגישה הזאת זאת הגישה זה הרעיון הכללי אבל מה שאנחנו רוצים להגיד זה אנחנו רוצים לבדוק את כל הפקדים של הויו שלנו אחד אחרי השני מה זאת אומרת זאת אומרת שבכל ויו קונטרולר יש תכונה אחת שנקראת הויו והויו הזה של הויו קונטרולר בטח אתם ראינו את זה כבר זה ה-view
הזה הראשי ובתוך ה-view הזה יש הרבה ילדים ולילדים האלה אולי יש עוד ילדים למשל ל-stack view הזה יש עוד ילדים בפנים נכון ל-view יש ילדים הילד שלו זה ה-stack view ול-stack view יש ילדים הילדים שלו הם הטקסט פילדים אז מה שאני רוצה לעשות אני רוצה לעבור בצורה רקורסיבית מ-view לבנו מבנו
לבניו עד שאני מוצא טקסט פילדים ואז אני אומר להם לשחרר את ה first responder בוא נראה זה דווקא קטע יפה בתכנון איך נעשה את זה קודם כל נגיד להם ללכת לפעולה הרקורסיבית שהייתי עוד מעט שיצרנו נגיד לפעולה הזאת שתיקח את הview שלנו בסדר עכשיו אוקיי דבר שני אנחנו נעשה את הדבר הבא עבור כל ילד מהילדים של הview איך נעשה את הפעולה הזאת
בוא נעשה ככה for child in view.subviews בסדר אז הנה יש לנו אפשרות לרוץ פה על כל העניין הזה אז יש לי כל פעם subview 1 בסדר באנדרואיד הם נקראים children נכון אז כאן הם subviews אוקיי מצוין אז הנה אני רץ עליהם אחד אחד עכשיו מה אני עושה אני אומר child.resign first responder לא נכון
מה שאני רוצה לעשות אני רוצה לעשות או resign first responder או לרוץ על הילדים שלו גם כן אוקיי אז מה שאנחנו נעשה אנחנו נעשה דבר כזה אנחנו נבדוק אם ה-child is UI text field אז child.resign first responder ואם הוא לא text field נכון אז בוא נפעיל את הפעולה על הילדים שלו בסדר אז אם הוא לא text field נפעיל את הפעולה על הילדים
שלו כלומר נקרא עוד הפעם ליד קיבורד עם ה-child