كيف يمكنني استخدام تعدد الأشكال للسماح لطريقة ما بقبول فئات متعددة، ولكن مع IBOutlets؟

StackOverflow https://stackoverflow.com//questions/25089654

  •  02-01-2020
  •  | 
  •  

سؤال

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

ضمن هذه الطريقة أريد تعيين nameLabel المنظر الذي تمتلكه جميع الحيوانات.كيف أقوم بإعداده حتى أتمكن من القيام بذلك؟

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

ثم حاولت أ Protocol, ، لكن هذا ليس متعدد الأشكال ولن أتمكن من الوصول إلى خاصية nameLabel من خلال فئة فائقة عامة، هل يمكنني ذلك؟على عكس Objective-C، لم أتمكن من طلب ملف UIView <ProtocolName> ومن ثم سيسمح لي أن أطلب ذلك.

كيف يجب أن أفعل هذا؟أريد فقط أن أكون قادرًا على تمرير أنواع مختلفة من الكائنات وأن تكون متوافقة مع Interface Builder.هل يجب أن أتعامل مع الأمر بشكل مختلف تمامًا؟

هل كانت مفيدة؟

المحلول

يمكنك توصيل منفذ label إلى مختلف viewControllers مع الخاص بك SuperClass من لوحة القصة إذا كان لديك مختلفة viewControlelrs في القصة المصورة إعادة تعيين بواسطة Subclasses(مشتقة من أسماء SuperClass) في القصة المصورة.

1) فقط حدد

 class SuperClass{
     @IBOutlet weak var label: UILabel! = nil

 }

SubClass1 ممثل view controller1 في القصة المصورة المستمدة من SuperClass SubClass2 يمثل آخر view controller2 في القصة المصورة المستمدة من SuperClass

2) من الذهاب إلى Assistant Editor ومفتوحة SuperClass جانب واحد والجانب الآخر view controller1 وتوصيل المنفذ من SuperClass ل label في لوحة القصة في view controller1.اسحب من SuperClass label إلى لوحة القصة في view controller1 enter image description here

3) الآن مفتوح مرة أخرى SuperClass جانب واحد والجانب الآخر view controller2 وتوصيل المنفذ من SuperClass ل label في لوحة القصة في view controller2.اسحب من SuperClass label إلى لوحة القصة في view controller2

إذا قمت بالنقر فوق SuperClass منفذ مما ستشاهده علامتين متصلتين بوحدات تحكم عرض مختلفة

نصائح أخرى

أعلن IBOutlet في superclass, AnimalView.ثم في Interface Builder، بمجرد تعيين الإعداد المخصص UIView's الطبقة في مفتش الهوية ليكون DogView, ، انتقل إلى مفتش الاتصالات و nameLabel سيكون هناك.

@interface Parent : UIView

@property (nonatomic,weak) IBOutlet UILabel *nameLabel;

@end

@interface Child : Parent

@end

enter image description here

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top