
הטקסט המלא של הדקות הראשונות בהרצאה «UITextField - UITextFieldDelegate Validation of entered characters» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום וברוכים הבאים בסרטון הקודם הראינו איך אפשר לשחרר את המקלדת בתגובה ללחיצה על כפתור go וגם ראינו בסרטונים קודמים איך לשחרר את המקלדת באופן כללי יותר בתגובה לסתם לחיצה פה במסך היום אנחנו רוצים להמשיך להרחיב את הדיבור על ה-UI טקסט פילד דלגייט אם אתם זוכרים בסרטון הקודם מה שעשינו היה פשוט להוסיף טקסט
פילד ולומר לטקסט פילד שה-view controller שזה הקוד שאנחנו כותבים הוא הדלגייט של הטקסט פילד. עכשיו, דלגייט זה בעצם איזשהו דיזיין פאטרן מאוד מאוד נפוץ גם באנדרואיד, גם באי.או.אס, שבעצם עוזר לנו לקבל הודעות, אוקיי? מהטקסט פילד עוזר לנו המתכנתי לקבל
הודעות מעניינות מהטקסט פילד. למשל, בואו נעבור על הקלאס הזה של ה-UI טקסט פילד בדוקומנטציה הרשמית של אפל, אז היום אומרים שיש לנו פה פשוט בטקסט פילד דלגייט אוסף של פעולות שימושיות שיעזרו לנו לנהל את העריכה וולידציה של הטקסט פילד, וזה מה שאנחנו רוצים לעשות היום, מה שאנחנו רוצים ללמוד היום אנחנו
רוצים לוודא תקינות של קלט שקיבלנו כאן, יכול להיות שאני רוצה שהטקסט שלי יתחיל יהיה מספרים בלבד, אני רוצה שהטקסט שלי יהיה עד 6 ספרות, אני רוצה כל מיני פקודות וולידציה כאלה ואחרות, אוסף תווים כזה ואחר וזה מה שאנחנו רוצים בעצם לאפשר, בסדר אני רוצה לאפשר נניח איזה שהם תווים מסוימים ותווים אחרים לא לאפשר, אז אני רוצה לבדוק את זה אולי אני רוצה אורך
של מחרוזת כן נגיד עד שלוש תווים אז מה שאנחנו נרצה לעשות היום זה באמת לוודא תקינות ככה של טקסט שהוקלט על ידי היוזר בעזרת הפרוטוקול הזה של ה-UI טקסט פילד דלגייט ומימושו אתם מוזמנים לגשת לדוקומנטציה הכללית ולקרוא על זה כן אבל אנחנו נעשה את הדוגמה כבר במסגרת המעשית
בסדר אז יצרנו קשר בין הטקסט פילד שלי ל-view קונטרולר שבעצם אנחנו הדלגייט שלו ועכשיו מימשנו פה את הפרוטוקול של UI טקסטפילד דלגייט בשיעור שעבר וטיפלנו פה בעניין של הכפתור ריטרן היום אנחנו רוצים לטפל בפעולה טקסטפילד עומד להחליף תווים במסגרת מסוימת
בוא נראה אז אנחנו פשוט נמלא פה טקסטפילד ויש פה שוד צ'יינג צ'ארקטרס אין ריינג' וואו איזה מתודה יפה אני אומר יפה יש לו שם של המתודה מסגיר הכל, הוא אומר אני עומד לשנות תווים באיזשהו ריינג' מסוים ואתה צריך להחזיר לי true או false אם אני מרשה לעשות את זה או לא, אוקיי?
אם אני מחזיר פה true, בוא נחזיר פה רגע true, אז הוא אומר שמותר לשנות את התווים. בסדר, אבל הוא מודיע לי פה, אני עומד לשנות תווים, האם אתה מסכים שאנחנו נשנה? היוזר היא כלי טקסט, האם אתה מסכים לשינוי?
כן או לא, לפני שאנחנו מכילים אותו. מה אנחנו מקבלים פה? מקבלים פה את הטקסט פילד, מקבלים פה range שאומר באיזה טווח של אותיות הולך להתבצע השינוי במקרה הזה זה יהיה האות השלישית נכון פה זה טווח כזה באמצע בין האות הראשונה לשנייה בסדר ביחס לטקסט שנמצא בטקסט פילם אוקיי עכשיו אם אני מסמן את הכל אז כאילו זה בטווח של בין 0 ל-1 נכון זאת אומרת כל
האינדקסים של הסטרינגים אנחנו לא צריכים להיכנס לזה יותר מדי אבל זה מה שזה מייצג את הטווח של השינוי והסטרינג שעומד להיכנס במקום הסטרינג בטווח של השינוי בסדר לא לא להיבהל זה הרבה ככה דברים בואו נעשה פעולות מאוד פשוטות לאט לאט בוא נגיד אנחנו רוצים בצורה מאוד פרימיטיבית בהתחלה אנחנו ככה בוא
נעשה ככה בוא ניקח את הטקסט שיש בטקסט פילד let text שווה טקסט פילד נקודת טקסט בסדר עכשיו אנחנו בטוחים שיש שם טקסט אז אני אקספליסיטלי אנרופ ומה שאני אגיד אני אשאל אם הטקסט קאונט קטן מאיזשהו מספר נניח נגדיר לעצמנו משתנה גם let maxcount שווה 6 תווים אז הכל טוב אם הוא קטן מ-6 אני מאפשר נכון אנחנו בעצם עושים פה ולידציה ראשונה שלנו בוא נבדוק בואו
ננסה להגליד טקסט בהתחלה הכל עובד בסדר הופ 6 תווים נכון אי אפשר להמשיך עכשיו יש עם זה פה בעיה אתם רואים לא מימשנו את זה בצורה יותר מדי חכמה אז אנחנו קצת תקועים מבינים למה כי אולי אני רוצה להגיד אולי הרפלייסמנט סטרינג שהבאתם לי הוא ריק ואז אני בהחלט רוצה לאפשר את זה נכון? זאת אומרת אפשר ככה להמשיך
ולהוסיף פה איזשהו תנאי וגם הרפלייסמנט סטרינג שנתתם לנו יש בו משהו אם אתם רוצים לרוקן אז בכיף בסדר אם אתם רוצים לרוקן אז יש אחרת רק שיש תווים בסדר בואו נראה את זה בא מנסה להקליד חמש תווים עכשיו אני מנסה למחוק אין בעיה בכיף נכון ברגע שהרפלייסמנט סטרינג ריק זה בעצם מחיקה ואז אני אומר, או שאם הצ'אר שש תווים אז אתה יכול להוסיף,
אחרת אולי יש לך סטרינג רגע לתת לי ואז אני מרשה לך למחוק בכל מקרה. יפה. אז עכשיו בעצם נניח בצורה הכי בסיסית, אתם רוצים לאפשר שש תווים, זאת אופציה.
אבל מה קורה חברים אם אתם רוצים לבדוק שהתווים שלכם נמצאים באיזשהו ריינג' מסוים, בסדר? זאת אומרת באיזשהו צ'אר סט מסוים. בואו תנו לי לדייק את מה שאני אומר.
אני ארצה להגדיר לעצמי תווים מותרים. Allowed Characters, בסדר? או Charse Set. מה זה Set? זה Characters, ככה, אתם יודעים, Set זה אוסף שלא חוזר על עצמו, ואני רוצה להשתמש בסטים בגלל שסטים הם נהדרים ועוזרים לנו ממש ככה להתמודד עם בעיות סבוכות.
בוא נגיד שאני רוצה את התווים בבסיס X הדצימלי, יש לנו 1 עד 6, עד 9 סליחה, 0 ו-a,b,c,d,e,f וגם a,b,c,d,e,f אוקיי, אלה התווים שאני רוצה להרשות.
אתם יכולים להרשות פה איזה תווים שאתם רוצים, numbers only, אותיות בלבד, דברים שמתאימים ל-email וכך הלאה, אני מראה לכם פשוט דוגמא, תיקחו את זה לאן שאתם רוצים.
אז אלה התווים שאני מתיר. איך אני עכשיו יכול לבדוק שהתווים שהיוזר הכניס, שהסטרינג הזה נמצא בתווים המותרים, אחרת אני לא מסכים לשינוי, נכון?
בואו נבדוק מה התווים שהיוזר הקליד, נכניס אותם גם כן לסט, בגלל שסטים זה קבוצות, ובקבוצות יש כל מיני פעולות שעוזרות לנו לבדוק, האם הקבוצה הזאת מוכלת בקבוצה השנייה, וכך הלאה.
ואז בעצם זה פותר לי את כל הבעיות, אז אנחנו בהחלט נשתמש פה בסטים. let entered set, האותיות שהיוזר הכניס, שווה גם כן character set, בסדר? in-string, אותו דבר כמו שהשתמשתי קודם, שהפעם אני לוקח את ה-string שהיוזר הקליד, וזה מה שהיוזר הכניס נכון יוזר set ואנחנו set בסדר our set allowed set עכשיו כדי לבדוק
האם ה-entered set מוכל בתוך ה-allowed set אנחנו יכולים לומר פה נניח entered set סליחה בוא נגיד ככה נשאל את זה בצורה אחרת האם ה-allowed set מכיל את כל ה-entered set בסדר אז בואו נראה איך אנחנו עושים את זה ה-allowed הוא בעצם סופר סט של מה שהיוזר הכניס של האנטר סט בסדר כן או לא בוא נבדוק אם זה עובד לנו ואיך זה עובד גם לא בינינו פה את העניין
של המספר תווים נכון זה ראינו קודם בסדר בוא נראה אני מנסה להכניס נקודותיים לא מרשה לי מנסה להכניס שלוש למה לא זה בתווים המותרים מנסה להכניס דולר לא הולך מנסה להכניס סולמית כן יפה r לא נכון וואו מגניב בוא ניקח על עצמנו משימה אחרונה ואמיתית לפעמים אנחנו רוצים לאפשר רק שתי תווים ושיהיו
אקס בסדר זאת אומרת בואו ניקח את זה עד הסוף את הדוגמה הזאת אז מה אני אומר איזה ולידציה אני רוצה מותר להכניס סולמית ועוד שתי תווים בסדר אז למשל FF נכון זה מה שאני מרשה להכניס זה הגודל המותר יפה איך אני כופה את זה אז כמה תווים יש פה שלוש תווים נכון אנחנו יכולים בצורה נאיבית לעשות כמו קודם עם הטריק הזה של בוא נראה איך עשינו את זה
אמרנו קודם כל שזה יהיה בתווים המותרים אחרת אנחנו לא מסכימים נכון בנוסף באנו והלכנו בצורה הקלה ואמרנו יאללה בוא נוסיף גם עוד ראשון למשל הטקסט שיש עכשיו אקאונט שלו קטן משלוש או קטן מהמאקס הכי טוב נכון אנחנו משתמשים פה במשתנה שהגדרנו למעלה נסדר אותו להיות שלוש או שהסטרינג שהיוזר הכניס הוא סטרינג ריק זה כמעט עובד טוב חברה
אני אגיד לכם את האמת אולי אתם לא הייתם מרגישים והייתם הולכים עם זה הביתה מרוצים אבל אנחנו פה בשביל ללמוד אני אראה לכם זה עובד פיקס רק אני יכול ללמד אתכם עוד יותר טוב אז רגע בוא נראה סתם מנסה לשים אותיות אוקיי רצינו גם שזה יתחיל בזה נכון זאת אומרת לאו דווקא כן רגע אז איך אני אומר מתחיל בסולמית גם בוא נוסיף עוד אחד אנחנו לא כל כך
יכולים להגיד מתחיל בסולמית כי הסטרינג שקיבלנו פה כפרמטר זה בעצם רק הסטרינג שרוצים להכניס ויכול להיות שהטקסט הוא ריק ויש פה הרבה הרבה איפים ודברים כאלה ואנחנו מסתבכים פה עם האלגוריתם בגלל שהרעיון הזה פה הוא לא הכי מוצלח לא ככה עושים את הוולידציה בצורה מקצועית.