Force Touch ו-Haptic Touch: תפריטי הקשר ב-iOS

משתמשים לוחצים ארוכות על אלמנט, אך תפריט ההקשר לא מופיע—סימן ל-API מיושן שנכשל במכשירים מודרניים. אנחנו בונים אפליקציות iOS עם מכניקת תפריטי הקשר עדכנית, turnkey, ומבטיחים התנהגות עקבית בכל המכשירים עם תמיכה מתמשכת.

פיתוח ותמיכה בכל סוגי היישומים הניידים:

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

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
Force Touch ו-Haptic Touch: תפריטי הקשר ב-iOS
פשוט
~1 יום

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    869
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1289
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

תפריטי הקשר ב-iOS: Force Touch, Haptic Touch ו-UIContextMenuInteraction

כשמפתחים אפליקציית iOS, נתקלים לא פעם במצב: המשתמש לוחץ לחיצה ארוכה על אלמנט, אבל התפריט לא מופיע. למה? כי הקוד עדיין משתמש ב-UIViewControllerPreviewing — ממשק ה-3D Touch המיושן שלא עובד במכשירים ללא Force Touch. מאז iOS 13, אפל איחדה את המנגנון: UIContextMenuInteraction אחד מחליף את שתי הגישות. אנחנו משתמשים בו בכל הפרויקטים החדשים — הוא מבטיח התנהגות עקבית ב-iPhone SE, iPad ו-iPhone 15 Pro. גישה זו מפחיתה את עלויות התחזוקה ב-30% בהשוואה לשני מימושים נפרדים.

תיעוד מפתחי Apple: UIContextMenuInteraction

למה להחליף את UIViewControllerPreviewing?

שימוש בממשק המיושן אומר שבמכשירים ללא Force Touch (iPhone XR, SE, 11 ומעלה), התפריט לא יופיע. זה מוביל לאובדן פונקציונליות ישיר עבור 80% מהמשתמשים. let interaction = UIContextMenuInteraction(delegate: self) myView.addInteraction(interaction) func contextMenuInteraction( _ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint ) -> UIContextMenuConfiguration? { return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { _ in let share = UIAction(title: "Поделиться", image: UIImage(systemName: "square.and.arrow.up")) { _ in self.shareItem() } let delete = UIAction(title: "Удалить", image: UIImage(systemName: "trash"), attributes: .destructive) { _ in self.deleteItem() } return UIMenu(title: "", children: [share, delete]) } } עובד באופן זהה בכל המכשירים עם iOS 13, ומפשט את הקוד בחצי.

איך UIContextMenuInteraction עובד

המחלקה הזו היא הדרך הנכונה היחידה ליצירת תפריט הקשר. היא מתאימה את עצמה אוטומטית לסוג הלחיצה: באייפונים ישנים יותר — Force Touch, בחדשים יותר — Haptic Touch. ב-iPad עם משטח עקיבה, התפריט נפתח בלחיצה ימנית. כל טיפול במחוות הוא פנימי. צריך רק להגדיר את התצורה.

מימוש בסיסי לתצוגה מותאמת אישית
let interaction = UIContextMenuInteraction(delegate: self)
myView.addInteraction(interaction)

func contextMenuInteraction(
    _ interaction: UIContextMenuInteraction,
    configurationForMenuAtLocation location: CGPoint
) -> UIContextMenuConfiguration? {
    return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { _ in
        let share = UIAction(title: "Поделиться", image: UIImage(systemName: "square.and.arrow.up")) { _ in
            self.shareItem()
        }
        let delete = UIAction(title: "Удалить", image: UIImage(systemName: "trash"), attributes: .destructive) { _ in
            self.deleteItem()
        }
        return UIMenu(title: "", children: [share, delete])
    }
}

attributes: .destructive צובע את הפריט באדום — התנהגות iOS סטנדרטית לפעולות הרסניות. previewProvider הוא תצוגה מקדימה מותאמת אישית אופציונלית בלחיצה ארוכה; בלעדיו, iOS מציג צילום מסך אוטומטי של התצוגה.

עבור UITableView: אפילו פשוט יותר

ל-UITableView יש תמיכה מובנית דרך מתודות delegate. המימוש קצר ב-40% משימוש ישיר ב-UIContextMenuInteraction.

func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
    let item = items[indexPath.row]
    return UIContextMenuConfiguration(identifier: indexPath as NSIndexPath) { [weak self] in
        ItemPreviewViewController(item: item)
    } actionProvider: { _ in
        UIMenu(title: "", children: [
            UIAction(title: "Открыть") { _ in
                self?.openItem(item)
            },
            UIAction(title: "Удалить", attributes: .destructive) { _ in
                self?.deleteItem(item)
            }
        ])
    }
}

מימוש יחיד עובד עם Force Touch, Haptic Touch ומשטח העקיבה של iPad.

השוואת גישות

שיטה מכשירים מורכבות תצוגה מקדימה מותאמת אישית תמיכת iOS
func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? { let item = items[indexPath.row] return UIContextMenuConfiguration(identifier: indexPath as NSIndexPath) { [weak self] in ItemPreviewViewController(item: item) } actionProvider: { _ in UIMenu(title: "", children: [ UIAction(title: "Открыть") { _ in self?.openItem(item) }, UIAction(title: "Удалить", attributes: .destructive) { _ in self?.deleteItem(item) } ]) } } Force Touch בלבד (6s–X) בינונית כן iOS 9–13 (מיושן)
UIViewControllerPreviewing כל המכשירים עם iOS 13 נמוכה כן (אופציונלי) iOS 13+
UIContextMenuInteraction/UITableview כל המכשירים עם iOS 13 נמוכה מאוד כן (דרך delegate) iOS 13+

ברור ש-UICollectionView או מתודות ה-delegate של הטבלה הן הבחירה המודרנית היחידה. אנחנו ממליצים בחום לא להשתמש בממשק הישן כדי להימנע מבעיות אישור ב-App Store — סעיף 4.2 בהנחיות הביקורת של App Store דורש פונקציונליות תקינה בכל המכשירים הנתמכים.

תהליך היישום שלנו

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

שלב משך
ניתוח 0.5 ימים
עיצוב 0.5 ימים
יישום יום אחד
בדיקות 0.5 ימים
השקה 0.5 ימים
  1. ניתוח — זיהוי אלמנטים שצריכים תפריט הקשר (תאי רשימה, תמונות, קישורים).
  2. עיצוב — הרכבת רשימת פעולות: בשימוש תכוף בראש, הרסניות בתחתית (עם מאפיין .destructive).
  3. יישום — כתיבת קוד באמצעות UIContextMenuInteraction או מתודות delegate. הוספת תצוגה מקדימה מותאמת אישית אם נדרש מידע מפורט.
  4. בדיקות — בדיקה בסימולטור (לחיצה ארוכה מדמה Haptic Touch) ובמכשירים עם Haptic Touch ו-Force Touch. תשומת לב מיוחדת לתפריטי משנה ופעולות מקוננות.
  5. השקה — חתימה, העלאה ל-App Store Connect, שימוש ב-TestFlight לבדיקות בטא.

מה כלול בעבודה שלנו

  • מימוש תפריט הקשר כולל: מאב-טיפוס ועד פרסום ב-App Store.
  • אינטגרציה עם Firebase Analytics למעקב אחר פעולות שנבחרו.
  • תמיכה ב-Universal Links / App Links לפתיחת התפריט מבחוץ.
  • תיעוד על יישום ובדיקות.
  • הכשרת הצוות שלך לעבודה עם UIContextMenuInteraction.
  • אחריות לתאימות עם גרסאות iOS נוכחיות ועתידיות.

לוח זמנים משוער

יישום תפריט הקשר דרך UIContextMenuInteraction או מתודות delegate ב-UIContextMenuInteraction/UITableView — בתוך יום עבודה אחד, כולל בדיקות במכשירים עם Force Touch ו-Haptic Touch. אם נדרשת תצוגה מקדימה מותאמת אישית או אינטגרציית אנליטיקה, לוח הזמנים מתארך ליומיים.

טעויות נפוצות ואיך להימנע מהן

  • שכחת הוספת UICollectionView לתצוגה לפני קריאה ל-UIContextMenuInteraction — התפריט לא יופיע.
  • שימוש ב-addInteraction בפרויקט חדש — ב-iPhone XR ומעלה, התפריט לא יעבוד.
  • אי טיפול ב-UIViewControllerPreviewing — מחיקה לא תודגש באדום.
  • ניסיון להתאים אישית את ה-UIMenu הסטנדרטי (שינוי צבע, גופן) — זה אסור; Apple לא מספקת יכולות כאלה.

הניסיון שלנו עוזר להימנע מהמלכודות האלה — כבר עברנו את הדרך הזו ואנחנו מכירים את כל הבורות.

צרו קשר לייעוץ. קבלו הערכה של הפרויקט שלכם והצעה מסחרית מפורטת.