سؤال

انا املك UIButton, ، والتي عند الضغط عليها تظهر طريقة عرض جديدة حيث يمكن للمستخدم تغيير بعض الإعدادات.عندما يتم رفض العرض، أرغب في تحديث عنوان/نص ملف UIButton لتعكس الحالة الجديدة.انا اتصل:

[myButton setTitle: @"myTitle" forState: UIControlStateNormal];
[myButton setTitle: @"myTitle" forState: UIControlStateApplication];
[myButton setTitle: @"myTitle" forState: UIControlStateHighlighted];
[myButton setTitle: @"myTitle" forState: UIControlStateReserved];
[myButton setTitle: @"myTitle" forState: UIControlStateSelected];
[myButton setTitle: @"myTitle" forState: UIControlStateDisabled];

ولكن يبدو أنه لا يتغير أبدًا عن النص/العنوان الأصلي كما هو محدد في IB.

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

المحلول

هل لديك الزر المحدد باعتباره IBOutlet في فئة وحدة التحكم في العرض الخاصة بك، وهل هو متصل بشكل صحيح كمنفذ في Interface Builder (اسحب ctrl من منفذ مرجعي جديد إلى مالك الملف وحدد كائن UIButton الخاص بك)؟هذه هي المشكلة التي أواجهها عادة عندما أرى هذه الأعراض.


يحرر:على الرغم من أن الأمر ليس كذلك هنا، إلا أن شيئًا كهذا يمكن أن يحدث أيضًا إذا قمت بتعيين العنوان المنسوب إلى الزر، ثم تحاول تغيير العنوان وليس العنوان المنسوب.

نصائح أخرى

وأنا حل المشكلة فقط تعيين المعلمة عنوان UIControlStateNormal، ويعمل تلقائيا على الدول الأخرى. المشكلة يبدو أن عند تعيين UIControlState آخر.

[myButton setTitle: @"myTitle" forState: UIControlStateNormal];

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

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

وأخيرا، إذا كنت تبين وجهة النظر مع الزر الخاص بك ومن ثم استدعاء رأي آخر (مثل ActionSheet) ثم صرف النظر عنها، النص الذي قمت بتعيينه إلى الزر برمجيا سوف تمحى وزر شرح سيعود ل كل ما قمت بإعداد في XIB.

وعلى الرغم من أن تحل قضية كوما الكافيين، وأنا نود أن نقدم سببا محتملا آخر للحصول على اللقب لا تظهر على UIButton.

إذا قمت بتعيين صورة للUIButton باستخدام

- (void)setImage:(UIImage *)image forState:(UIControlState)state

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

استخدم هذه الطريقة بدلا

- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state

وللصورة زر وعنوان لن تتأثر.

وأنا جربت هذا مع أزرار والأزرار التي تم إنشاؤها برمجيا إنشاؤها في .xib

واعتبارا من سويفت 4:

    button.setTitle("Click", for: .normal)

للسريع :

button.setTitle("Swift", forState: UIControlState.Normal)                   

وتبين مستندات اقول لكم الجواب! سوف UIButton تجاهل التغيير عنوان إذا كان لديه بالفعل سلسلة ينسب إلى استخدام (مع ويبدو أن التقصير تحصل عند استخدام واجهة إكس كود البناء).

واعتدت ما يلي:

[self.loginButton 
     setAttributedTitle:[[NSAttributedString alloc] initWithString:@"Error !!!" attributes:nil] 
     forState:UIControlStateDisabled];
[self.loginButton setEnabled:NO];

وأكثر واحد السبب المحتمل هو:

إذا حاولت تعيين عنوان زر في طريقة (id)initWithNibName: ...، ثم كنت سوف الملكية زر لا يزال صفرا. لم يتم تعيينه إلى UIButton.

ويجب أن تتأكد من أن كنت وضع الأزرار الخاصة بك في طريقة مثل (void)viewWillLoad أو (void)viewWillAppear، ولكن ربما كنت لا تريد أن تضعها في وقت متأخر من (void)viewDidAppear.

وأحيانا يمكن أن تتعقد حقا. الطريق السهل هو " تحديث " وجهة نظر زر!

//Do stuff to your button here.  For example:

[mybutton setEnabled:YES];

//Refresh it to new state.

[mybutton setNeedsDisplay];

وظللت تواجه مشاكل مع هذا، كان الحل الوحيد لإضافة صورة والتسمية كما subviews إلى uibutton. ثم اكتشفت أن المشكلة الرئيسية هي أن كنت تستخدم UIButton بعنوان: ينسب. عندما تغييره إلى سهل، فعلت وضع titleLabel.text خدعة!

وfunroll هو على حق تماما. هنا يمكنك ان ترى ما سوف تحتاج تأكد من وظيفة يعمل على الترابط الرئيسي فقط . إذا كنت لا تريد التعامل مع المواضيع يمكنك القيام به مثل هذا على سبيل المثال: إنشاء NSUserDefaults وفي ViewDidLoad تشيكينج حالة تم الضغط على زر في عرض آخر أم لا (في عرض آخر المنصوص عليها في NSUserDefaults حاجة المعلومات) واعتمادا على مجموعة الشروط اللازمة اللقب لل بك UIButton، لذلك [yourButton setTitle: @ "العنوان" forState: UIControlStateNormal]؛

تأكد من أنك على الترابط الرئيسي.

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

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