добавить изображение в UIBarButtonItem для UIToolbar - PullRequest
1 голос
/ 21 июля 2010

Я пытаюсь добавить изображение в UIBarButtonItem, которое мне нужно использовать в UIToolbar.

Мне удалось прочитать изображение и даже заставить его отображаться с помощью UIImageView, но когда я его добавляюв UIBarButtonItem, а затем добавьте этот элемент на UIToolbar, панель инструментов просто смещает «пустое белое» пространство на размер и форму изображения, которое я пытаюсь загрузить.

вот что я пытаюсь.

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

//This is the UIImageView that I was using to display the image so that i know that it is being read from the path specified.  
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(0, 50, image.size.width, image.size.height);
[self.view addSubview:imageView];

UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];
[button1 setImage:image forState:UIControlStateNormal];

//This is the first way that I was trying to accomplish the task but i just get a blank white space

//This is the Second way but with the same blank white result.
UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithCustomView:button2];

NSArray *items = [NSArray arrayWithObjects: systemItem1, nil];

//Adding array of buttons to toolbar
[toolBar setItems:items animated:NO];

//Adding the Toolbar to the view.
[self.view addSubview:toolBar];

Ваша помощь будет высоко оценена.

Спасибо!

Шумаис Уль Хак

1 Ответ

3 голосов
/ 21 июля 2010

В отличие от того, что вы обычно ожидаете от UIKit, вам может понадобиться явно установить рамку для кнопки.Может быть, в этом твоя проблема.

Это то, что я написал для кнопки назад с пользовательским стилем, в качестве категории UIBarButtonItem (но вы можете просто взять нужные вам кусочки).

Обратите внимание, что это было использовано для панели навигации, а не для панели инструментов, но я предполагаю, что механика одинакова, поскольку она также UIBarButtonItem.Для UIToolbar вы можете просто использовать IB для правильной настройки во время компиляции.

#define TEXT_MARGIN 8.0f
#define ARROW_MARGIN 12.0f
#define FONT_SIZE 13.0f
#define IMAGE_HEIGHT 31.0f

+(UIBarButtonItem*)arrowLeftWithText:(NSString*)txt target:(id)target action:(SEL)selector
{
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    UIImage *img = [[UIImage imageNamed:@"arrow_left.png"]
        stretchableImageWithLeftCapWidth:15 topCapHeight:0];

    [btn addTarget:target action:selector forControlEvents:UIControlEventTouchDown];

    [btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentRight];
    [btn setContentEdgeInsets:UIEdgeInsetsMake(0.0f,0.0f,0.0f,TEXT_MARGIN)];
    [btn.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:FONT_SIZE]];
    [btn.titleLabel setShadowOffset:CGSizeMake(0.0f,-1.0f)];

    /**** this is the magic line ****/
    btn.frame = CGRectMake(0.0f,0.0f,
        [txt sizeWithFont:[btn.titleLabel font]].width+ARROW_MARGIN+TEXT_MARGIN,
        IMAGE_HEIGHT);

    [btn styleBarButtonForState:UIControlStateNormal withImage:img andText:txt];
    [btn styleBarButtonForState:UIControlStateDisabled withImage:img andText:txt];
    [btn styleBarButtonForState:UIControlStateHighlighted withImage:img andText:txt];
    [btn styleBarButtonForState:UIControlStateSelected withImage:img andText:txt];
    return [[[UIBarButtonItem alloc] initWithCustomView:btn] autorelease];
}

использование:

[UIBarButtonItem arrowLeftWithText:@"Back" target:self action:@selector(dismiss)];
...