Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. iOS SDK
Code

وحدات تحكم التنقل والتحكم في عرض التسلسلات الهرمية 

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

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

تعد وحدات التحكم في التنقل إحدى الأدوات الأساسية لعرض عدة شاشات من المحتوى باستخدام iOS SDK. هذه المادة سوف تعلمك كيفية القيام بذلك تماما!


المقدمة

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

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

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

في هذه المقالة ، سنقوم بإنشاء تطبيق iOS جديد للتعرف على فئة UINavigationController. ستلاحظ أن الجمع بين وحدة التحكم في التنقل ومجموعة من وحدات التحكم في العرض (الجدول) هو حل أنيق وقوي.E

بالإضافة إلى فئة UINavigationController ، سأقوم أيضًا بتغطية فئة UITableViewController ، فئة فرعية أخرى UIViewController. تدير فئة UITableViewController مثيل UITableView بدلاً من نسخة UIView الافتراضية. افتراضيا ، فإنه يعتمد UITableViewDataSource وبروتوكولات UITableViewDelegate ، والتي ستوفر لنا قدرا كبيرا من الوقت.


وهناك مشروع آخر

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

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

إنشاء المشروع

افتح Xcode ، أنشئ مشروعًا جديدًا بتحديد New> Project ... من القائمة File ، وحدد قالب Single View Application من قائمة قوالب iOS.

اسم مكتبة المشروع ، وتعيين اسم المؤسسة ، ومعرّف الشركة. اختر بادئة الفئة وقم بتعيين الأجهزة على iPhone. أخبر Xcode حيث تريد حفظ المشروع واضغط على Create.

يحتوي القالب الذي اخترناه لهذا المشروع على فئة مفوضاً للتطبيق (TSPAppDelegate) ، و storyboard ، وفئة فرعية UIViewController (TSPViewController).

افتح TSPAppDelegate.m وإلقاء نظرة على الانجاز التطبيق: didFinishLaunchingWithOptions :. يجب أن يبدو تطبيقه مألوفًا الآن.

إضافة الموارد

تتضمن الملفات المصدر المتوفرة مع هذه المقالة البيانات التي سنستخدمها. يمكنك العثور عليها في المجلد المسمى "الموارد". يتضمن المجلد قائمة خصائص (Books.plist) تحتوي على معلومات حول المؤلفين والكتب التي قاموا بكتابتها وبعض المعلومات حول كل كتاب وصورة لكل كتاب مدرج في قائمة الخصائص.

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

قوائم الممتلكات

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

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

Xcode يجعل قوائم الملكية التصفح سهلة للغاية كما رأينا سابقا. حدد Books.plist من مجلد "الموارد" الذي أضفته إلى مشروعك وتصفح محتويات Books.plist باستخدام مستعرض قائمة الخصائص المضمنة في Xcode. ستكون هذه أداة مفيدة لاحقًا في هذه المقالة عندما نبدأ العمل مع محتويات Books.plist.

فئة فرعية  UITableViewController

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

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

ابدأ بإزالة TSPViewController.h و TSPViewController.m من المشروع الخاص بك. قم بإنشاء فئة جديدة بتحديد New> File ... من القائمة File. حدد قالب الفئة Objective-C في قائمة iOS> قوالب Touch Cocoa.

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

افتح Main.storyboard لاستبدال وحدة تحكم العرض في لوحة العمل مع وحدة تحكم في عرض الجدول. حدد وحدة تحكم العرض في لوحة العمل ، واضغط مفتاح الحذف واسحب UITableViewController من مكتبة الكائنات على اليسار. حدد وحدة التحكم الجديدة للعرض ، وافتح محقق التماثل على اليمين ، وقم بتعيين فئتها على TSPAuthorsViewController.

بعد ذلك ، حدد كائن عرض الجدول في مساحة العمل أو من قائمة الكائنات الموجودة على اليسار ، وافتح Attributes Inspector على اليمين ، وقم بتعيين Prototype Cells على 0. لن نستخدم خلايا النموذج الأولي في هذه المقالة.

 ملء عرض الجدول

افتح TSPAuthorsViewController.m وتفحص محتويات الملف. لأن TSPAuthorsViewController عبارة عن فئة فرعية من UITableViewController ، يتم تعبئة ملف التطبيق مع التطبيقات الافتراضية المطلوبة وبعض الطرق الاختيارية لبروتوكولي UITableViewDataSource و UITableViewDelegate.

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

إنشاء خاصية من نوع NSArray في ملف رأس وحدة تحكم العرض واسمه المؤلفين.

طريقة viewDidLoad تحكم العرض هو مكان جيد لتحميل البيانات من Books.plist في خاصية المؤلفين وحدة تحكم العرض. يمكننا القيام بذلك باستخدام طريقة طبقة NSArray ، arrayWithContentsOfFile :.

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

للحصول على مسار ملف Books.plist ، نحتاج أولاً إلى مرجع إلى الحزمة الرئيسية للتطبيق باستخدام mainBundle ، أسلوب فئة NSBundle. الخطوة التالية هي طلب حزمة التطبيق لمسار أحد موارده ، Books.plist. نقوم بذلك عن طريق إرسال رسالة من pathForResource: ofType: وتمرير اسم ونوع (ملحق) الملف الذي نريد المسار إليه. نقوم بتخزين مسار الملف في مثيل NSString كما هو موضح أدناه.

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

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

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

يشبه تنفيذ tableView: cellForRowAtIndexPath: الطريقة التي رأيناها في المقالة السابقة. والفرق الرئيسي هو كيفية إحضار البيانات التي نعرضها في خلية عرض الجدول.

يحتوي مصفوفة المؤلفين على قائمة مرتبة من القواميس ، مع كل قاموس يحتوي على اثنين من أزواج القيمة الرئيسية. يعتبر الكائن الخاص بالمفتاح المسمى المؤلف هو مثيل NSString ، في حين أن الكائن الخاص بكود الكتب عبارة عن مصفوفة من القواميس مع كل قاموس يمثل كتابًا من تأليف المؤلف. افتح Books.plist في Xcode لفحص بنية مصدر البيانات إذا لم يكن ذلك واضحًا.

مع هذه المعلومات في الاعتبار، تنفيذ tableView:cellForRowAtIndexPath: لا ينبغي أن يكون من الصعب جداً.

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


إضافة وحدة تحكم في التنقل

إن إضافة وحدة تحكم في التنقل أمر سهل باستخدام لوحة العمل. ومع ذلك ، قبل إضافة وحدة تحكم في التنقل ، من المهم فهم كيفية عمل وحدات التحكم في التنقل على نظام iOS.

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

Navigation Controllers and View Controller Hierarchies - The Navigation Stack of a Navigation Controller - Figure 11

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

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

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

ارجع إلى لوحة العمل الخاصة بالمشروع (Main.storyboard) وحدد وحدة التحكم في العرض. لإضافة وحدة تحكم في التنقل إلى المزيج ، حدد Embed In> Navigation Controller من قائمة Editor. تغيرت بعض الأشياء:

  • وحدة تحكم التنقل هي وحدة تحكم العرض الأولي في  لوحة القصة
  • تمت إضافة مشهد جديد باسم Navigation Controller Scene
  • يتم إضافة شريط التنقل إلى وحدة التحكم في عرض التنقل والمؤلفين
  • ترتبط وحدة التحكم في التنقل ووحدة تحكم مشاهدة المؤلفين بعلامة segue

تُعد المقاطع شيوعًا في القصص المصورة وسنتعرف على المزيد منها لاحقًا في هذه السلسلة. هناك أنواع مختلفة من segues و segue الذي يربط بين وحدة تحكم التنقل وعرض المؤلفين هو علاقة segue.

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

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

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

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

لإضافة عنوان إلى شريط التنقل ، أدخل السطر التالي في طريقة viewDidLoad للفئة TSPAuthorsViewController.

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

الاقناع و الرجوع بسرعه

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

التحكم في عرض جدول اخر

لماذا لا تعرض قائمة الكتب في عرض جدول آخر. إنشاء فئة فرعية جديدة من UITableViewController وتسمية TSPBooksViewController.

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

تعلن وحدة تحكم عرض الكتب عن خاصية مسماة بالاسم ، والتي يمكن ضبطها لتكوين وحدة تحكم عرض الكتب لعرض كتب المؤلف المحدد. افتح TSPBooksViewController.h وأضف خاصية من النوع NSString واسمه المؤلف كما هو موضح أدناه. يمكنك تجاهل الكلمة المفتاحية nonatomic الآن. لا يهم قصتنا في الوقت الحالي.

تذكر من بضع دروس مضت أن ميزة خصائص Objective-C هي أن طريقة getter و setter لمتغيرات الحالة المقابلة يتم إنشاؤها تلقائيًا لنا. هناك أوقات ، ومع ذلك ، عندما يكون من الضروري أو المفيد تطبيق طريقة الضيق أو الضبط الخاصة بك. هذا هو واحد من تلك الأوقات.

عندما يتم تعيين خاصية الكاتب للفئة TSPBooksViewController ، يجب تعديل مصدر البيانات من عرض الجدول. سنقوم بذلك في طريقة الإعداد لمتغير مثيل _author. دعونا نرى كيف يعمل هذا.

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

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

يتم لصق طريقة الضبط الخاصة بمتغير مثيل  _author لوحدة تحكم العرض أدناه. يمكنك إضافته في أي مكان في implementation@ للفئة. لا تخاف من التنفيذ. لنبدأ من القمة.

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

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

يجب أن يكون السطرين التاليين مألوفين. نقوم بتحميل قائمة الخصائص من حزمة التطبيق وتخزين محتوياتها في مصفوفة تسمى مؤلفين. ثم نقوم بتكرار أكثر من قائمة المؤلفين والبحث عن المؤلف الذي يطابق المؤلف المخزن في _author.

أهم مقتطف من هذا الضابط هو المقارنة بين tempAuthor و _author. إذا كنت تستخدم علامة مساواة مزدوجة (==) لهذه المقارنة ، فستقوم بمقارنة المراجع بالكائنات (المؤشرات) وليس السلاسل التي تديرها الكائنات. jقوم فئة NSString بتعريف طريقة ، isEqualToString: والتي تسمح لنا بمقارنة السلاسل بدلاً من مؤشرات الكائن.

لمزيد من المعلومات حول المستفيدين والمقيمين (المودعين) ، أود الرجوع إلى وثائق Apple. انها تستحق وقتك لقراءة هذا القسم من الوثائق.

بقية فئة TSPBooksViewController سهلة مقارنة مع ما قمنا بتغطيته حتى الآن. ألق نظرة على عمليات تنفيذ طرق بروتوكول UITableViewDataSource الثلاثة الموضحة أدناه.


 دفع المراقب المالي

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

سوف تساعدنا القصص المصورة في ذلك. افتح Main.storyboard ، واسحب نسخة UITableViewController أخرى من مكتبة الكائنات ، وقم بتعيين صفها إلى TSPBooksViewController في Identity Inspector.

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

 حدد وحدة تحكم عرض المؤلفين في لوحة العمل ، واضغط مفتاح Control ، واسحب من وحدة تحكم عرض المؤلفين إلى وحدة تحكم عرض الكتب. حدد "دفع" من القائمة التي تظهر لإنشاء segue بين وحدات تحكم العرض الاثنتين.

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

 لوضع segue للاستخدام ، نحتاج إلى تطبيق tableView: didSelectRowAtIndexPath: method في وحدة تحكم عرض الكتّاب. يتم تعريف هذه الطريقة في بروتوكول UITableViewDelegate كما رأينا في المقالة السابقة عن طرق عرض الجدول.

 قبل البدء ، أضف عبارة استيراد في الجزء العلوي من TSPAuthorsViewController.m لاستيراد ملف الرأس الخاص بفئة theTSPBooksViewController.

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

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

 تأخذ الدالة performSegueWithIdentifier: المرسل: الوسيطتين ، معرف segue ومرسل الرسالة. يجب أن يكون واضحا الآن لماذا اعطينا دفع شريحة معرف في القصة المصورة؟

نحن تعيين خاصية "الكاتب" لوحدة تحكم عرض الكتاب، ولكن كيف تحكم عرض الكتب يعرف مقدم البلاغ من المستخدم المحدد؟ قبل أن يتم تنفيذ segue، عرض المراقب المالي يتلقى رسالة prepareForSegue:sender:. في هذا الأسلوب، يمكنك تكوين وحدة تحكم عرض وحدة تحكم عرض الوجهة، الكتب عرض المراقب المالي. دعونا تنفيذ prepareForSegue:sender: لرؤية كيف يعمل هذا.

 يتم استدعاء هذا الأسلوب كلما يتم إجراء segue. نتحقق أولاً مما إذا كانت الخاصية destinationViewController الخاصة بـ segue هي مثيل لفئة TSPBooksViewController.  نستخدم isKindOfClass: لهذا. نحن قما بتعيين خاصية مؤلف الكتب لعرض وحدة تحكم وتعيين خاصية مؤلف الكتاب لعرض تحكم من الصفر. هذا الأخير هو أفضل الممارسات.

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

 قبل تشغيل التطبيق الخاص بك ، افتح TSPBooksViewController.m وقم بتعيين عنوان وحدة تحكم العرض إلى خاصية المؤلف. سيقوم هذا بتحديث العنوان في شريط التنقل.

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


إضافة غلاف الكتاب

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

 أنشئ فئة فرعية جديدة من UIViewController - وليس UITableViewController - وأطلق عليها اسم TSPBookCoverViewController.

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

 افتح لوحة العمل ، واسحب نسخة UIViewController من مكتبة المشاريع ، واضبط صفها على TSPBookCoverViewController في Identity Inspector.

 اسحب  UIImageView من مكتبة المشاريع ، واجعله يغطي العرض الكامل لوحدة التحكم في العرض ، وقم بتوصيله بمنفذ bookCoverView لوحدة تحكم العرض.

 قبل تنفيذ وحدة التحكم في العرض ، قم بإنشاء segue push بين وحدة تحكم عرض الكتب ووحدة تحكم عرض غلاف الكتاب ، مع تعيين المعرّف الخاص به إلى BookCoverViewController.

 يمكن أن نلغي طريقة الإعداد لمتغير مثيل _bookCover ، ولكن لإظهار طريقة بديلة ، نقوم بتعيين خاصية صورة عرض الصورة في طريقة viewDidLoad الخاصة بضبط العرض كما هو موضح أدناه. نتحقق أولاً مما إذا تم تعيين خاصية bookCover - لا شيء - ثم قم بتعيين خاصية صورة BookCoverView إلى القيمة المخزنة في خاصية bookCover.


اختتام الحلقة

كل  ما تبقى لنا للقيام به ، هو إظهار غلاف الكتاب عندما يقوم المستخدم بنقر عنوان الكتاب في وحدة تحكم عرض الكتب. وهذا يعني تنفيذ الجدول طريقة تفويض جدول العرض ViewView: didSelectRowAtIndexPath: في فئة TSPBooksViewController. لا تنس أولاً استيراد ملف الرأس الخاص بفئة TSPBookCoverViewController عن طريق إضافة عبارة استيراد في الجزء العلوي من TSPBooksViewController.m.

كما  فعلنا في وحدة تحكم مشاهدة المؤلفين ، نحتاج إلى إنشاء خاصية خاصة لتخزين صورة غلاف الكتاب.

 تنفيذ tableView: didSelectRowAtIndexPath: في TSPBooksViewController.m يجب أن تبدو مألوفة. نقوم بجلب الكتاب الذي حدده المستخدم وإنشاء مثيل UIImage باستخدام طريقة imageNamed: class وتمرير اسم الصورة. يتم تخزين الصورة في خاصية bookCover.

ثم نقوم بإجراء segue مع معرف BookCoveViewController وتكوين وحدة تحكم عرض غلاف الكتاب في prepareForSegue: sender :.

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


 أين البوب؟

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

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

 بدلا من ذلك، يمكن البوب ​​كافة وحدات التحكم  المرئية من كومة التنقل  باستثناء العرض الجذري التحكم عن طريق إرسال وحدة تحكم الملاحة رسالة popToRootViewControllerAnimated :.


الاستنتاج

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

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

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.