Я хочу создать 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.
Я предполагаю, что должен разделить на подклассы, но что?
спасибо,
с уважением,
Вы можете добавить метод в 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
с помощью кнопки напрямую в качестве настраиваемого представления.
П.П.С. В вашем коде также должен быть [прямой выпуск].