UIBarButtonItem с пользовательским изображением и никакой границей

Я хочу создать UIBarButtonItem с пользовательским изображением, но я не хочу границу, которую добавляет iPhone, поскольку мое Изображение имеет специальную границу.

Это совпадает с кнопкой "Назад", но вперед кнопка.

Это Приложение для внутреннего проекта, таким образом, я не забочусь, утверждает ли отклонение Apple или его или любит его :-)

Если я использую initWithCustomView:v свойство UIBarButtonItem, я могу сделать это:

UIImage *image = [UIImage imageNamed:@"right.png"];

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal];
[button setBackgroundImage: [[UIImage imageNamed: @"right_clicked.png"] stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateHighlighted];

 button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height);

[button addTarget:self action:@selector(AcceptData)    forControlEvents:UIControlEventTouchUpInside];

UIView *v=[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, image.size.width, image.size.height) ];

[v addSubview:button];

UIBarButtonItem *forward = [[UIBarButtonItem alloc] initWithCustomView:v];

self.navigationItem.rightBarButtonItem= forward;

[v release];
[image release];

Это работает, но если я должен повторить этот процесс в 10 представлениях, это не DRY.

Я предполагаю, что должен разделить на подклассы, но что?

  • NSView?
  • UIBarButtonItem?

спасибо,

с уважением,

88
задан san 9 February 2014 в 04:47
поделиться

1 ответ

Вы можете добавить метод в UIBarButtonItem без его подкласса с использованием настраиваемой категории:

@interface UIBarButtonItem(MyCategory)

+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image target:(id)target action:(SEL)action;

@end

@implementation UIBarButtonItem(MyCategory)

+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image target:(id)target action:(SEL)action{
 // Move your item creation code here
}
@end

Таким образом, в любом месте вашего кода вы можете создать элемент панели, вызывающий этот метод (при условии, что вы включаете заголовок с его объявлением).

П.С. Вам не нужно использовать 'v' UIView, поскольку вы можете создать UIBarButtonItem с помощью кнопки напрямую в качестве настраиваемого представления.
П.П.С. В вашем коде также должен быть [прямой выпуск].

44
ответ дан 24 November 2019 в 07:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: