سؤال

على شريط Nav الخاص بي ، لديّ اثنين من RightBarButtonItems التي تحتوي على أيقونات مخصصة (صور الأيقونة بيضاء ، والتي عملت بشكل جيد مع نظام الألوان الأساسي لـ iOS 6).

ضمن iOS 7 ، يحل تحميل الصور باستخدام initWithTitle (انظر Code Snippet 1) اللون "الأبيض" في الرمز مع اللون العالمي المناسب (لون محدد من اللون الأزرق الداكن في هذه الحالة)

رمز مقتطف 1:

UIBarButtonItem *refreshButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:(UIBarButtonItemStyle) UIBarButtonSystemItemCancel target:(self) action:@selector(refreshList)];

refreshButton.image = [UIImage imageNamed:@"RefreshIcon.png"];

ومع ذلك ، كنت بحاجة إلى استخدام initWithCustomView للتغلب على تغيير غريب في السلوك الذي كان يسبب الرموز للخروج عن الأنظار. كانت الفكرة الأساسية هي ضبط حجم الرموز على وجه التحديد. itwithCustomView حل مشكلة التحجيم ، ولكن لا يعرض صور الزر مع الصبغة العالمية ، يتم عرضها بلون الصورة (أبيض). يوضح Code Snippet 2 كيف أقوم بإنشاء الزر مع initWithCustomView.

رمز مقتطف 2:

CGRect frameCustomButton2 = CGRectMake(0.0, 0.0, 18.0, 18.0);
UIButton *customButton2 = [[UIButton alloc] initWithFrame:frameCustomButton2];
[customButton2 setBackgroundImage:iconRefreshButton forState:UIControlStateNormal];
UIBarButtonItem *barCustomButton2 =[[UIBarButtonItem alloc] initWithCustomView:customButton2 ];
barCustomButton2.image = iconRefreshButton;
[customButton2 addTarget:self action:@selector(refreshList) forControlEvents:UIControlEventTouchUpInside];

كل هذا الرمز بالطبع في (void) viewDidload. لقد جربت أشياء مثل:

barCustomButton2.tintColor = [UIColor blackColor];  //doesn't work

أو [Barbuttonappearance Settintcolor: [Uicolor BlackColor]] ؛ // لا يعمل

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

كيف يمكنني التأكد من أن أيقونة الزر تأخذ الصبغة العالمية؟

شكرًا!

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

المحلول

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

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

UIImage *iconRefreshButton = [UIImage imageNamed:@"MyIconFilename.png"];
iconRefreshButton = [iconRefreshButton imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

الافتراضي ، إذا لم تقم بتعيينه ، هو "uiimagerenderingmodeautomatic" مما يعني أنه سيتم تقديمه كقالب أو صورة أصلية استنادًا إلى السياق.

نصائح أخرى

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

أود أن أوصي النهج الأول.

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