UIAppearance لم يكن بهذه البساطة

ظهر بروتوكول UIAppearance في نظام التشغيل iOS 5 في عام 2011 ، في الأوقات البعيدة التي لم يكن فيها Instagram أحد تطبيقات Android ، ولم يتم قطع مسلسل Ned Stark بعد.


حول إدارد

أرسل إليّ الأسياد غرابًا مع خبر أنهم في وقت إصدار نظام iOS 5 ، كانوا قد قطعوا بالفعل. ولكن حتى لا أفسد العرس الأحمر أو أي شيء آخر ، ربما سأترك كل شيء كما هو.


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


كمقدمة صغيرة ، تعتبر المقتطفات من الوثائق التي كانت دائمًا المصدر الرئيسي الموثوق للمعلومات.


يمكنك تخصيص مظهر مثيلات فئة ما عن طريق إرسال رسائل تعديل المظهر إلى وكيل مظهر الفئة.

لدعم تخصيص المظهر ، يجب أن تتوافق فئة ما مع بروتوكول UIAppearanceContainer ، ويجب وضع علامة على طرق الوصول ذات الصلة باستخدام UI_APPEARANCE_SELECTOR

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


ولكن "لا ينجح" لا يعني "لا يمكنك المحاولة" ، لذلك أقترح أن يكون كل شخص مهتم بالقيام بتجربة بسيطة: افتح المشروع الأول الذي تحصل عليه وأضف السطر التالي إلى application:didFinishLaunchingWithOptions: method:


 UIView.appearance().isHidden = true 

تقدير ما سيحدث وتشغيل.


أنا ، مثل التجويف ، أتوقع خيارات ممكنة:


  • لا شيء يحدث
  • لا يحدث شيء ، ولكن سجل مثل "isHidden ليس UI_APPEARANCE_SELECTOR ، غبي" يقع في وحدة التحكم ؛
  • التطبيق يمسك خطأ فادحا أو تأكيد مع رسالة مماثلة.

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


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


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


 UITableView.appearance().delegate = nil 

يمكنك إعادة تعيين جميع المفوضين إلى جميع الجداول التي تظهر على الشاشة بعد تنفيذ هذا الرمز.


سيكون للمطورين الكثير من المرح في محاولة لمعرفة ما حدث! بالتأكيد ، يمكنك التوصل إلى شيء أكثر متعة!


آمل حقًا ألا تمر شركة Apple بهذه الأمور دون أن يلاحظها أحد (لم أجد أي معلومات حول هذا الموضوع) ، ويتم الكشف عن حيل مشابهة في مكان ما في مرحلة التحقق التلقائي للتجميع في AppstoreConnect. ولكي أكون صادقًا ، لا أشعر بالتحقق.


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


سكرتير خاص يعيدني 2011!

Source: https://habr.com/ru/post/ar453126/


All Articles