Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. iOS SDK

الخطوات الأولى مع UIKit 

by
Difficulty:BeginnerLength:LongLanguages:
This post is part of a series called Learn iOS SDK Development From Scratch.
Exploring the Foundation Framework
Table View Basics

Arabic (العربية/عربي) translation by Saadkhaled (you can also view the original English article)

UIKit هو الإطار الذي ستجد نفسك  تستخدمه غالبًا عند تطوير تطبيقات iOS. يحدد المكونات الأساسية لتطبيق iOS ، من التسميات والأزرار إلى وجهات نظر الجدول وأجهزة التحكم في التنقل.  في هذه المقالة ، لن نبدأ فقط في استكشاف إطار عمل UIKit ، بل سنستكشف أيضًا الأجزاء الداخلية لمشروع iOS وكتل البناء الأساسية لتطبيقات iOS. 


ما هو إطار UIKit؟ 

على الرغم من أن إطار المؤسسة يحدد الطبقات والبروتوكولات والوظائف لتطوير نظامي التشغيل iOS و OS X ، فإن إطار UIKit موجه حصراً نحو تطوير iOS. إنه ما يعادل إطار Application Kit أو AppKit لتطوير OS X. 

 كالمؤسسة ، يعرّف UIKit الطبقات والبروتوكولات والوظائف وأنواع البيانات والثوابت.  كما أنه يضيف وظائف إضافية لمختلف فصول التأسيس ، مثل NSObject و NSString و NSValue من خلال استخدام فئات Objective-C. 

تعد فئات Objective-C طريقة ملائمة لإضافة أساليب إضافية للفئات الموجودة دون الحاجة إلى تصنيفها إلى فئات فرعية.  اقرأ هذا البرنامج التعليمي من قبل Aaron Crabtree إذا كنت تريد معرفة المزيد عن فئات Objective-C.

بدلاً من استكشاف الفئات الرئيسية في UIKit كما فعلنا في إطار المؤسسة ، سننشئ ونسافر عبر مشروع iOS جديد ونستكشف الفصول التي نواجهها.  من خلال اتباع هذا الأسلوب ، سوف يتضح بسرعة في أي سياق يتم استخدام الفصل الدراسي وكيف يتناسب كل فصل مع المخطط الأوسع لتطبيق iOS وما هو الدور الذي يلعبه. 


بداية جديدة

قم بتشغيل Xcode وأنشئ مشروعًا جديدًا بتحديد New> Project ... من القائمة File. في قسم iOS على اليمين ، حدد فئة التطبيق. من قائمة قوالب المشروع ، اختر قالب تطبيق العرض المفرد.

يحتوي قالب تطبيق العرض المفرد على اللبنات الأساسية لتطبيق iOS وهو بالتالي مكان جيد لبدء رحلتنا.

اسم المشروع UIKit وأدخل اسم المؤسسة ومعرّف الشركة. أدخل بادئة فئة ، كما شرحت سابقًا في هذه السلسلة ، وقم بتعيين الأجهزة على iPhone.

أخبر Xcode حيث تريد حفظ المشروع الجديد وتأكد من وضع المشروع تحت التحكم في الإصدار عن طريق تحديد مربع الاختيار المسمى Create git repository على My Mac. راجع هذه المقالة للحصول على مزيد من المعلومات حول التحكم في الإصدار وفوائده. 


الملفات والمجلدات

لقد تعلمنا الكثير من الأشياء الجديدة منذ آخر مرة قمنا فيها بإنشاء مشروع iOS من الصفر لذا فمن المستحسن استكشاف الملفات والمجلدات المختلفة في مشروعنا الجديد لمعرفة ما إذا كانوا يقرعون الجرس.

في Project Navigator ، يجب أن تشاهد ثلاثة مجلدات في جذر المشروع ؛

  • منتجات
  • إطار الأعمال
  • مجلد باسم المشروع الخاص بك ، UIKit في هذا المثال
  • مجلد ينتهي اسمه مع الاختبارات ، UIKitTests في هذا المثال

دعونا نلقي نظرة على محتويات كل من هذه المجلدات.

منتجات

يحتوي مجلد " المنتجات" حالياً على عنصرين.  البند الأول يحمل اسم مشروعنا ولديه امتداد ل. app. اسم العنصر الثاني ينتهي في الاختبارات ويحتوي على امتداد .xctest. لن أغطي اختبارات الوحدة في هذه السلسلة ، لذا يمكنك تجاهل العنصر الثاني في الوقت الحالي.

يحتوي مجلد "المنتجات" على التطبيق - أو التطبيقات - التي أنشأها المشروع بعد تجميع شفرة المصدر.

هل لاحظت أن UIKit.app تم تمييزه باللون الأحمر؟ كلما كان Xcode غير قادر على تحديد موقع ملف ، فإنه يبرز الملف باللون الأحمر.  نظرًا لعدم تصنيف المشروع بعد ، لم يقم Xcode بإنشاء المنتج بعد.

إطار الأعمال

يحتوي مجلد إطار الأعمال على إطار الأعمال المرتبطة بمشروعك. في المقالة السابقة ، كان مشروعنا مرتبطًا فقط بالإطار التأسيسي. ومع ذلك ، يعتمد هذا المشروع على نموذج تطبيق iOS ويرتبط بالتالي بأربعة أطر عمل وهي Foundation و UIKit و Core Graphics و XCTest.

قد تتذكر إطار الرسومات الأساسية من قبل في هذه السلسلة. يحتوي الإطار على الواجهات لـ (Quartz) 2D drawing API. يرتبط إطار XCTest باختبار الوحدة ، والذي لن أغطيه في هذه السلسلة.

يوجد موقع آخر في مشروعنا يحدد إطار الأعمال التي يرتبط بها المشروع. حدد المشروع في Project Navigator ، واختر العنصر الوحيد في قسم "الأهداف" على اليسار ، وافتح علامة التبويب "مراحل البناء" في الجزء العلوي.

عن طريق فتح درج Link Binary with Libraries ، يتم تقديمك مع نفس قائمة إطارات العمل التي رأيناها في مجلد Frameworks. يعد ربط مشروعنا مع إطار نظام iOS آخر سهلاً مثل النقر فوق الزر "زائد" في أسفل القائمة وتحديد إطار من القائمة.

ملف المشروع

يتم قضاء معظم وقتك في مجلد المشروع ، والذي يحتوي حاليًا على ستة ملفات ومجلد واحد باسم Supporting Files. لنبدأ بإلقاء نظرة على محتويات المجلد Supporting Files.

  • <PROJECT> -Info.plist: هذا الملف ، والمشار إليه عادة باسم ملف "نقطة - نقطة plist" للمشروع ، هو قائمة الخصائص التي تحتوي على إعدادات التكوين المختلفة. يمكن أيضًا تعديل معظم هذه الإعدادات عن طريق تحديد المشروع في Project Navigator واختيار الهدف في قائمة Targets وفتح علامات التبويب General و Capabilities و Info.
  • InfoPlist.strings: إذا احتوى Info.plist على قيم تحتاج إلى الترجمة ، فيمكنك القيام بذلك عن طريق تحديدها في InfoPlist.strings. توطين التطبيق هو شيء لن نغطيه في هذه السلسلة.
  • main.m: يجب أن يكون هذا الملف مألوفًا الآن. عند إنشاء تطبيقات iOS ، نادرًا ما ستقوم بتعديل محتويات main.m. أنه يحتوي على الوظيفة الرئيسية للتطبيق ، حيث يبدأ كل السحر. على الرغم من أننا لن نقوم بتعديل main.m ، إلا أنه ضروري لتطبيق iOS الخاص بك.
  • <PROJECT>-Prefix.pch:</PROJECT> هذا هو ملف رأس precompiled المشروع ، التي واجهناها مسبقاً في هذه السلسلة. كما يشير اسمها ، يتم تحويل ملفات الرأس المدرجة في ملف رأس precompiled مسبقًا بواسطة Xcode ، مما يؤدي إلى تقليل الوقت المستغرق لتجميع المشروع. لا تتغير أطار العمل الخاصة بالمؤسسة و UIKit في كثير من الأحيان ، لذا لا داعي لتجميعها في كل مرة تقوم فيها بتجميع مشروعك. بالإضافة إلى إعادة تصنيف ملفات الرأس المدرجة في ملف رأس precompiled ، يتم prefixed كل ملف مصدر في المشروع مع ملفات الرأس المدرجة.

مكونات التطبيق

الآن بعد أن عرفنا ما هي الملفات والمجلدات المختلفة في مشروعنا ، فقد حان الوقت لاستكشاف المكونات المختلفة لتطبيق iOS. بينما نواصل رحلتنا ، سوف نأتي عبر العديد من الطبقات التي تنتمي إلى UIKit. يبدأ كل فئة ينتمي إلى إطار UIKit مع UI بادئة فئة. تذكر أن الطبقات التأسيسية مسبوقة بـ NS.


نمط عرض نموذج المراقب المالي

قبل أن نبدأ في استكشاف إطار عمل UIKit ، أريد أن أتحدث عن نموذج Model-View-Controller (MVC). نمط MVC هو أحد أكثر الأنماط انتشارًا في البرمجة الموجهة للكائنات. وهو يعزز إعادة استخدام الشفرات ويرتبط ارتباطًا وثيقًا بمفهوم الفصل بين المسؤوليات أو الاهتمامات. أحد الأهداف الرئيسية لنمط MVC هو فصل منطق عمل التطبيق من طبقة التقديم.

تحتضن Cocoa Touch نمط MVC و بالتالي من المهم فهم ماهيته وكيف يعمل. بمعنى آخر ، من خلال فهم نمط MVC ، سيكون من الأسهل بكثير فهم كيفية عمل المكونات المختلفة لتطبيق iOS معًا.

في نموذج MVC ، يكون النموذج هو المسيطر على منطق عمل التطبيق. التفاعل مع قاعدة بيانات ، على سبيل المثال ، هو مسؤولية النموذج. يقدم العرض البيانات التي يديرها النموذج للمستخدم. يدير العرض واجهة المستخدم وإدخال المستخدم.

وحدة التحكم هي الغراء بين النموذج وطريقة العرض. في حين أن النموذج والرأي لا يعرفان عن وجود كل منهما ، فإن وحدة التحكم تعرف كلًا من النموذج وطريقة العرض.

نظرًا لأن وحدة التحكم تعرف كل من النموذج والعرض ، فغالبًا ما يكون الجزء الأقل استخدامًا من التطبيق. وكلما أدرك شيء ما عن بيئته والأشياء التي يتفاعل معها ، كلما ازدادت إمكانية إعادة استخدامها في المشروعات المستقبلية.


UIApplication

على الرغم من أن فئة UIApplication هي عنصر أساسي في كل تطبيق iOS ، فإنك لن تتفاعل معها كثيرًا ، وستشعر ، في حالات نادرة ، بالحاجة إلى دعم Uiapplication فئة فرعية.

عندما يتم تشغيل تطبيق ، يتم إنشاء singleton من هذا الفصل. هل تتذكر ما هو كائن singleton ؟  وهذا يعني أنه يتم إنشاء مثيل كائن واحد فقط لفئة UIApplication خلال عمر التطبيق. 

و UIApplication المثال هو نقطة الدخول للمستخدم التفاعل ويرسل الأحداث إلى الكائنات المستهدفة المناسبة.  سيصبح المعنى الدقيق لهذا واضحًا في بضع دقائق عندما نلقي نظرة على وحدات التحكم في العرض.

في معظم تطبيقات iOS ، يحتوي مثيل UIApplication على كائن مفوض مقترن به.  عندما تقوم بإنشاء مشروع iOS باستخدام أحد القوالب المتوفرة ، سيقوم Xcode بإنشاء فئة مفوض تطبيق لك. إلقاء نظرة على أسماء الملفات المصدر في مجلد المشروع في Project Navigator. يتم تسمية الملفين الأولين TSPAppDelegate.

مثيل هذا الفصل هو المفوض الخاص بـ Singleton Uiapplication. قبل إلقاء نظرة فاحصة على فئة TSPAppDelegate ، نحتاج إلى فهم نمط المندوب.

كتب Ole Begemann مقالة ممتازة حول تسلسل إطلاق تطبيق iOS النموذجي. في هذه المقالة ، يتحدث عن المكونات المختلفة المعنية ودورها خلال تسلسل إطلاق التطبيق. أنا أوصي قراءة هذه المقالة إذا كنت ترغب في الحصول على فهم أفضل لدور فئة UIApplication فضلا عن الوظيفة الرئيسية () الغامضة في main.m.


نمط المندوب

يستخدم نمط مندوب على نطاق واسع في لمسة الكاكاو والكاكاو. في المقالة التالية من هذه السلسلة ، والتي نستكشف فيها خصوصيات وعرض الجداول ، ستكتشف أن مشاهدات الجداول تعتمد بشكل كبير على نمط المفوض (ومصدر البيانات).

مثل نمط MVC ، التفويض شائع في البرمجة الموجهة للكائنات. ومع ذلك ، يختلف نمط التفويض في Cocoa Touch قليلاً ، لأنه يستخدم بروتوكول تفويض لتعريف سلوك كائن التفويض.

دعونا نقفز إلى الأمام ونلقي نظرة على وجهات نظر الجدول. إذا كنت قد قضيت أي فترة من الوقت مع جهاز iPhone أو iPad ، فيجب أن تكون فئة UITableView مألوفة لك. يقدم قائمة مرتبة من البيانات للمستخدم ويقوم بهذا العمل بشكل جيد للغاية.

كيف يعرف عرض الجدول ما يجب القيام به عند النقر فوق صف ما؟ هل هذا السلوك مضمون في فئة UITableView؟ بالتأكيد لا ، لأن هذا السلوك يختلف من تطبيق إلى تطبيق. إذا تم تضمين هذا السلوك في فئة UITableView ، فلن يكون قابلاً لإعادة الاستخدام.

يوضح عرض الجدول هذه المسؤولية إلى كائن مفوض. وضع بشكل مختلف ، فإن تفويض هذه المهمة إلى كائن آخر ، كائن مفوض. يستغرق بعض الوقت لفحص مرجع الفصل لفئة UITableView.  لديها اثنين من الخصائص المسماة dataSource والمفوض. يتم إعلام المفوض من خلال عرض الجدول عندما ينقر المستخدم على صف. إنها مسؤولية كائن المفوض للرد على نقر المستخدم.

 مصدر البيانات لطريقة عرض الجدول من حيث السلوك متشابهة . يتمثل الاختلاف الرئيسي في أن طريقة عرض الجدول تطلب كائن مصدر البيانات لشيء ما ، أي البيانات التي تحتاج إلى عرضها.

تكون كائنات المفوض ومصادر البيانات ، مثل كائنات مفوض وبيانات مصدر الجدول ، دائمًا ما تكون فئات مخصصة ، فئات يتم إنشاؤها ، لأن التطبيق الخاص بها هو تطبيق معين.

قبل أن نلقي نظرة على فئة TSPAppDelegate ، من المهم أن نفهم أن كائن المفوض يتوافق مع بروتوكول تفويض. في المقالة السابقة ، تعلمنا بالفعل عن البروتوكولات في Objective-C وكيفية تعريفها للسلوك من خلال تحديد قائمة من الطرق التي يستخدمها المتتبعون لتنفيذها.


مندوب التطبيق

والآن بعد أن عرفنا ما هو التفويض ، فقد حان الوقت لاستكشاف فئة TSPAppDelegate التي أنشأها Xcode لنا. عند تشغيل التطبيق ، يقوم التطبيق بإنشاء مثيل لفئة TSPAppDelegate. لا تحتاج عادةً أبداً إلى إنشاء كائن تفويض تطبيق بشكل صريح.

افتح ملف رأس فئة TSPAppDelegate (TSPAppDelegate.h) لفحص محتوياته. إذا تجاهلنا التعليقات في الأعلى ، يستورد السطر الأول ملفات رأس إطار UIKit حتى يمكننا العمل مع فصوله وبروتوكولاته.

يجب أن يكون الخط التالي مألوفًا. هذا هو بداية واجهة فئة TSPAppDelegate كما هو محدد بواسطة توجيهinterface. وهي تحدد اسم الطبقة وفئة الطبقة الفائقة ، UIResponder.

بين أقواس زاوية البروتوكولات التي تتوافق مع الطبقة. تتوافق فئة TSPAppDelegate مع بروتوكول واحد ، بروتوكول UIApplicationDelegate.

السطر التالي هو إعلان الملكية ، والتي يجب أن تبدو مألوفة. الخاصية ، النافذة ، هي مثال على UIWindow ، وهي فئة فرعية من UIView. الكلمات بين قوسين ، قوية وغير مادية ، هي خصائص خاصية اختيارية تحدد دلالات التخزين وسلوك الخاصية. يمكنك تجاهلها في الوقت الحالي.

الجزء الأكثر إثارة للاهتمام من واجهة الطبقة TSPAppDelegate هو بروتوكول UIApplicationDelegate. إلقاء نظرة على مرجع بروتوكول UIApplicationDelegate لقائمة كاملة من الأساليب التي يحدد البروتوكول.

يحدد البروتوكول العشرات من الطرق ، وأشجعك على استكشاف القليل منها للحصول على فكرة عن قدرات البروتوكول. الطريقة الأكثر إثارة بالنسبة لنا في هذه المرحلة هي التطبيق: didFinishLaunchingWithOptions :.

عندما ينتهي مثيل UIApplication من إعداد التطبيق للتشغيل ، سيقوم بإعلام المفوض ، مثال TSPAppDelegate الخاص بنا ، بأن التطبيق سينتهي من التشغيل — لكن ذلك لم يحدث بعد.

لماذا تخطر مندوب التطبيق بهذا الحدث؟ تقوم جهة تطبيق UIApplication بإعلام مندوبيها عن هذا الحدث حتى يكون لديها فرصة للتحضير لبدء تشغيل التطبيق. توجه إلى ملف تنفيذ TSPAppDelegate لمعرفة ما أقصده. الطريقة الأولى في ملف التنفيذ هي تطبيق: didFinishLaunchingWithOptions: ويجب أن تبدو أكثر أو أقل مثل التي تم لصقها أدناه.

التطبيق: didFinishLaunchingWithOptions: طريقة توفر إشارة إلى مثيل UIApplication وقاموس مع خيارات ، والتي لا تهمنا في هذه المرحلة. تطبيق الطريقة بسيط جدا. كل ما يفعله هو إرجاع YES لإخبار مثيل UIApplication بأن التطبيق جاهز للإطلاق.

القصة المصورة

يحتوي مشروع Xcode على ملف آخر مثير للاهتمام ، Main.storyboard. تحدد لوحة العمل كيفية ظهور واجهة المستخدم الخاصة بتطبيقنا. بشكل افتراضي ، تتم تسمية لوحة العمل باسم Main.storyboard. حدد لوحة العمل لفتحها.

تحتوي لوحة العمل حاليًا على عرض واحد في مساحة العمل المركزية. على يمين Project Navigator ، يمكنك مشاهدة قائمة بالعناصر ، وهي الكائنات التي تراها في العرض. يدعى العنصر العلوي View Controller Scene ، والذي يحتوي على عنصر فرعي واحد يسمى View Controller.

يحتوي الكائن " عرض المراقب" أيضًا على عدد من العناصر الفرعية ، ولكن هناك عنصر له أهمية خاصة بالنسبة إلينا ،الكائن المسمى عرض .  تذكر مناقشتنا حول نمط MVC. هنا يمكنك رؤية نمط MVC في العمل. النموذج مفقود في الوقت الحالي ، ولكن لدينا طريقة عرض ، وكائن عرض ، ووحدة تحكم ، الكائن View Controller . 

عند إطلاق تطبيقنا ، يتم استخدام لوحة العمل لإنشاء واجهة مستخدم التطبيق. يتم إنشاء وحدة تحكم العرض تلقائيًا وكذلك طريقة عرض عنصر تحكم العرض. تتم إدارة كائن العرض في لوحة العمل بواسطة وحدة التحكم في العرض. 

انتظر دقيقة. أين يمكنني العثور على صنف وحدة التحكم في العرض في لوحة العمل؟ كيف يمكنني تغيير سلوكه لإنشاء تطبيق فريد؟ حدد كائن وحدة تحكم العرض على اليسار في لوحة العمل وافتح مفتش الهوية على اليمين. 

ويقول لك مفتش الهوية كل ما تحتاج إلى معرفته.  في الجزء العلوي ، في قسم Custom Class ، يمكنك مشاهدة اسم فئة وحدة التحكم في العرض ، TSPViewController .  هل لاحظت أن الملفين اللذين لم نتحدث عنهما لهما نفس الاسم؟ سنستكشف هذه الملفات في لحظات قليلة.

يتم إنشاء وحدة تحكم العرض لنا ، لأنها وحدة تحكم العرض الأولية لوحة القصة. تتم الإشارة إلى ذلك في لوحة العمل عن طريق السهم الذي يشير إلى لوحة العمل.

UIViewController 

إذا قمت بفتح TSPViewController.h ، فسوف تلاحظ أن فئةTSPViewController هي فئة فرعية من UIViewController .  مثل TSPAppDelegate ، و UIViewController الفئة هي فئة فرعية من UIResponder .  تقع وحدات التحكم في العرض أو الفئات الفرعية لها في فئة وحدة التحكم لنمط MVC.  كما يشير الاسم ، فإنها تتحكم في العرض ، وهو مثال لفئة UIView ، التي تقع فيفئة عرض نمط MVC. 

تدير وحدة التحكم في طريقة العرض طريقة العرض والمشاهدات الشخصية كما سنرى لاحقًا. للقيام بذلك ، يحتاج جهاز التحكم في العرض إلى معرفة طريقة العرض. بمعنى آخر ، يجب أن يكون هناك إشارة إلى طريقة العرض.

وحدة تحكم العرض في لوحة العمل تحتوي على مرجع إلى العرض. يمكنك التحقق من ذلك من خلال تحديد وحدة التحكم في العرض في لوحة العمل وفتحمفتش الاتصالات على اليمين. 

في Connections Inspector ، سترى قسمًا باسم Outlets .  المصطلح termlet هو عبارة عن كلمة خيالية لأحد الممتلكات ، والتي يمكنك تعيينها في لوحة العمل. قم بالمرور بالماوس فوق المخرج المسمى بـ المشاهدة وملاحظة كيفية تمييز العرض في مساحة العمل.  هذا هو الاتصال بين وحدة تحكم العرض وطريقة العرض.


UIView

على الرغم من أن التطبيق الخاص بك يمكن أن يحتوي على مثيل واحد فقط منUIWindow ، إلا أنه يمكن أن يكون له العديد من طرق العرض.  تعتبر فئة UIView عنصرًا مهمًا في إطار عمل UIKit ، نظرًا لأن العديد من الفئات ترثها - سواء بشكل مباشر أو غير مباشر. 

إعادة النظر Main.storyboard عن طريق تحديده وإلقاء نظرة على مكتبة كائن في الجزء السفلي من المفتش . 

تصفح مكتبة كائنات واسحب التسمية و زر إلى العرض في مساحة العمل.  لا يهم مكان وضعهم في طريقة العرض طالما أنهم في طريقة عرض وحدة تحكم العرض.

ستلاحظ أن كائنين جديدين قد تمت إضافتهما إلى قسم الكائنات على اليسار.  كل من العلامة (UILabel) والزر (UIButton) يرثان من UIView. هل لاحظت أن الكائنات تسمية و زر يتم مسافة بادئة قليلاً مقارنة مع كائن عرض؟ يشير هذا إلى أن الكائنات تسمية و زر هي subviews للكائن عرض. يمكن أن يكون للعرض ملفًا واحدًا أو أكثر يتم إدارته.

كما ذكرت سابقًا ، تعتبر فئة UIView مكونًا مهمًا في UIKit. يدير العرض منطقة مستطيلة أو إطار على الشاشة. وهي تدير محتويات المنطقة والمواقع الفرعية وأي تفاعلات مع محتويات العرض. فئة UIView هي فئة فرعية من UIResponder. سوف تتعلم الكثير عن وجهات النظر على مدار هذه السلسلة.


منافذ

لنلقِ نظرة على مثال لتوضيح العلاقة بين لوحة العمل ، والمشاهد الذي يحتوي عليه ، ووحدة التحكم في العرض. هذه المكونات الثلاثة مهمة وأريد أن أتأكد من أنك تفهم كيفية عملها معًا.

منذ بضع دقائق ، أضفت تسمية وزرًا إلى عرض وحدة تحكم العرض. كيف يعرف جهاز التحكم في العرض هذه الأشياء؟ في هذه اللحظة ، لا تظهر في "مفتش اتصالات" ، ولكن يمكننا تغيير ذلك بإعلام وحدة تحكم العرض عنهم.

فتح ملف رأس وحدة تحكم العرض (TPSViewController.h) وإضافة خاصية للتصنيف وللبزر.

بإضافة الكلمة الرئيسية IBOutlet إلى تصريح الخاصية ، ستظهر الخصائص في Connectives Inspector في لوحة العمل وهذا ما نريده.

عد إلى لوحة العمل ، حدد كائن View Controller في مشهد وحدة التحكم في العرض ، وافتح Connectives Inspector على اليمين. يتم سرد الخصائص الجديدة الآن في قائمة منافذ البيع. ومع ذلك ، فإن وحدة التحكم في العرض لم تقم بعد بإجراء الاتصال بين الخصائص الجديدة والكائنات الموجودة في لوحة العمل.

هذا سهل العلاج. اسحب من الدائرة الفارغة الموجودة على يسار منفذ myLabel إلى الملصق الموجود في مساحة العمل. سيؤدي ذلك إلى إنشاء اتصال هام للغاية بحيث يعرف جهاز التحكم في العرض التسمية. افعل الشيء نفسه مع الزر.


على الرغم من أنه يمكننا تغيير نص التسمية في لوحة العمل ، لنفعل ذلك في وحدة تحكم العرض لتوضيح أن وحدة التحكم في العرض لديها حق الوصول إلى الملصق والزر في لوحة العمل.

فتح ملف تنفيذ وحدة تحكم العرض (TPSViewController.m) وابحث عن طريقة viewDidLoad. قم بتعديل طريقة viewDidLoad لتعكس التنفيذ أدناه. تم حذف التعليقات للتوضيح.

يمكننا إرسال رسائل إلى خاصية التصنيف عن طريق مطالبة وحدة تحكم العرض ، ذاتية ، لموقع myLabel الخاص بها. عن طريق إرسال خاصية myLabel رسالة setText: وتمرير سلسلة حرفية ، نقوم بتحديث نص التسمية.

لاحظ أن setText: هو ملحق أو أداة تعيين. على الرغم من أنه من الممكن استخدام تدوين نقطة الهدف Objective-C (انظر أدناه) ، فقد استخدمت الصيغة الأكثر تقليدية حيث توضح لك بشكل أفضل ما يحدث بالفعل.

قم بتشغيل تطبيقك في iOS Simulator بالنقر فوق الزر Run في أعلى اليمين ولاحظ أنه يتم تحديث نص التسمية بالفعل.


أفعال

لقد استكشفنا الكثير من الأشياء الجديدة في هذه المقالة. أرغب في إنهاء هذه الدفعة من خلال التحدث عن الإجراءات.  تمامًا مثل المنافذ ، لا تعد الإجراءات أكثر من طرق يمكنك رؤيتها في لوحة العمل. 

دعونا نرى كيف يعمل هذا. فتح ملف رأس وحدة تحكم العرض (TPSViewController.h) وإضافة تعريف الأسلوب التالي في مكان ما في كتلة واجهة وحدة تحكم العرض.

لا يجب الخلط بينك وبين كلمة IBAction. IBAction متطابق مع الفراغ ، مما يعني أن الطريقة لا تعطي أي قيمة. إذا نظرنا عن كثب إلى تعريف الأسلوب ، يمكننا أن نرى أنه يأخذ وسيطة واحدة من نوع معرف ، إشارة إلى كائن Objective-C.

كما يشير اسم الوسيطة ، فإن الوسيطة في الأسلوب أو الإجراء هي الكائن الذي أرسل الرسالة إلى وحدة تحكم العرض. سأشرح ذلك بمزيد من التفصيل في قليل.

إعادة النظر في لوحة العمل ، حدد كائن وحدة تحكم العرض في مشهد وحدة التحكم ، وافتح Connectives Inspector. ظهر قسم جديد في Connectives Inspector المسمى "العمليات المتلقية" والإجراء الذي قمنا بإضافته مذكورًا في هذا القسم.

اسحب من الدائرة الفارغة على يسار الإجراء إلى الزر الموجود في مساحة العمل. يجب أن تظهر نافذة صغيرة تحتوي على قائمة من الخيارات. تحتوي القائمة على جميع الأحداث المحتملة التي يمكن للزر الاستجابة لها. الشخص الذي يهمنا هو اللمس للأعلى بالداخل. يتم تشغيل هذا الحدث عندما يلمس المستخدم الزر ويزيد إصبعه أثناء وجوده داخل الزر.

بناء وتشغيل التطبيق الخاص بك مرة أخرى وانقر على الزر. هل تعطل التطبيق بالنسبة لك أيضًا؟ كيف حدث هذا؟ عند النقر فوق الزر ، أرسل رسالة تغيير لون: إلى وحدة تحكم العرض. على الرغم من أن جهاز التحكم في العرض يقوم بتعريف طريقة changeColor: method ، إلا أنه لا يقوم بتطبيق هذه الطريقة حتى الآن.

عندما يتم إرسال رسالة إلى كائن لا يقوم بتنفيذ أسلوب مناظر ، يتم رفع استثناء ويعطل التطبيق إذا لم يتم اكتشاف الاستثناء. يمكنك التحقق من ذلك عن طريق تشغيل التطبيق مرة أخرى ، والتنصت على الزر ، وفحص الإخراج في إطار وحدة التحكم.

لعلاج هذا ، نحتاج إلى تنفيذ changeColor: method. فتح ملف تنفيذ وحدة تحكم العرض (TPSViewController.m) وإضافة تنفيذ الطريقة التالية في مكان ما في كتلة التنفيذ.

إن تطبيق changeColor: method مماثل للطريقة التي استخدمناها سابقاً في هذه السلسلة. ومع ذلك ، قمت بإضافة مكالمتين إضافيتين إلى NSLog لتنفيذها لتظهر لك أن مرسل الرسالة هو بالفعل الزر الذي أضفناه إلى لوحة العمل.

الطريقة نفسها بسيطة جدًا. نحن ننتج ثلاثة أعداد صحيحة عشوائية بين 0 و 255 ، ونمرر هذه القيم إلى colorWithRed: green: blue: alpha: لتوليد لون عشوائي وتحديث لون خلفية طريقة عرض وحدة تحكم العرض باللون بشكل عشوائي.

لاحظ أن self.view تشير إلى طريقة العرض التي تديرها وحدة التحكم في العرض والتي رأيناها سابقًا في لوحة العمل.

بناء وتشغيل التطبيق الخاص بك مرة أخرى ، اضغط على الزر ، ولا تنس أن تفقد الإخراج في نافذة وحدة التحكم Xcode. ستلاحظ أن المرسل هو مثال على UIButton وطبقته الفائقة هي UIControl.


استنتاج

في هذه المقالة ، قمنا باستكشاف عدد قليل من فئات إطار UIKit وألقينا نظرة عن قرب على المكونات المختلفة لتطبيق iOS. سنقوم باستكشاف والعمل مع إطار UIKit بمزيد من التفاصيل في بقية هذه السلسلة.

إذا كنت لا تفهم بشكل كامل مختلف المفاهيم والأنماط ، فأنا متأكد من أنك ستتقدم مع تقدم السلسلة. لا تتردد في ترك تعليق إذا كان لديك سؤال حول هذه المقالة.

Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.