Добавить изображение в кнопку UIBarButtonItem - PullRequest
16 голосов
/ 25 июля 2011

Я добавил UITabButtonItem на мой контроллер представления, используя следующий код. Может ли кто-нибудь сказать мне, возможно ли связать с ним изображение?

UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(favouriteButtonClicked:)]; 
viewController2.navigationItem.rightBarButtonItem = button; 
[button release];
[self.navigationController pushViewController:viewController2 animated:YES];

Я использую следующий код в других местах, но, как в приведенном выше коде, я помещаю viewcontroller в мое текущее представление, этот код не работает. Я должен был использовать вышеуказанный код.

UIButton *button =  [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:[UIImage imageNamed:@"unselected.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(favouriteButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[button setFrame:CGRectMake(280, 25, 30, 30)];
viewController2.navigationController.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease];

[self.navigationController pushViewController:viewController2 animated:YES];

Я не знаю, что не так, но когда я заменяю этот код пользовательской кнопки на initWithBarButtonSystemItem, он отлично работает !!!

Наконец-то я разобрался с этой проблемой и разместил здесь рабочий код, но все же я не понимаю, есть ли у меня кнопка в baseviewcontroller, и я добавляю ее следующим образом, она не работает !!! Мне пришлось использовать код, указанный в моем принятом ответе в viewwillappear !!

    [favButton addTarget:self action:@selector(favouriteButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
     self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease];  

Следующий код все еще не работает !!! Не знаю, что происходит.

MPMoviePlayerViewController *videoController = [[[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:filePath]] autorelease];

UIButton* favouritebutton =  [UIButton buttonWithType:UIButtonTypeCustom];
[favouritebutton setBackgroundImage:[UIImage imageNamed:@"unselected.png"] forState:UIControlStateNormal];
[favouritebutton addTarget:self action:@selector(favouriteButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[favouritebutton setFrame:CGRectMake(280, 25, 30, 30)];
videoController.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:favouritebutton] autorelease]; 

[self presentMoviePlayerViewControllerAnimated:videoController];

Спасибо.

Ответы [ 7 ]

21 голосов
/ 25 июля 2011
UIButton *favButton = [[UIButton alloc] init];

[favButton setImage:[UIImage imageNamed:@"unselected.png"] forState:UIControlStateNormal];
[favButton addTarget:self action:@selector(favouriteButtonClicked:)
   forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *button = [[UIBarButtonItem alloc]
                                initWithCustomView:favButton];

self.navigationItem.rightBarButtonItem = button;

[button release];
[favButton release];
9 голосов
/ 25 июля 2011
UIButton *button =  [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
 [button addTarget:self action:@selector(methodAction:) forControlEvents:UIControlEventTouchUpInside];
[button setFrame:CGRectMake(0, 0, 49, 30)];
 navController.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease];

Назначьте его навигационному контроллеру, а также вы можете установить изображение, как описано в моем коде выше.

5 голосов
/ 26 июля 2011

Хорошо. Наконец я решил это. Спасибо Мэгги и Правин. Только следующий код работает правильно для меня. Биты из обоих ваших ответов:)

UIButton *button =  [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:[UIImage imageNamed:@"unselected.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(favouriteButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[button setFrame:CGRectMake(280, 25, 30, 30)];
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease];

Спасибо.

2 голосов
/ 11 июля 2015

Великолепное решение Мэгги применительно к Swift:

let favButton = UIButton()
favButton.setImage(UIImage(named: "unselected"), forState: .Normal)
favButton.addTarget(self, action: "favouriteButtonClicked:", forControlEvents: .TouchUpInside)
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: favButton)
1 голос
/ 17 ноября 2014

Вот функция в Swift, которая использует ответ Мэгги:

class func returnBarButtonItemWithImage(theImageName:String, andDownImage theDownImageName:String, andSize theSize:CGFloat, withAction theAction:Selector, andTarget theTarget:AnyObject)->UIBarButtonItem? {

    if let myImage = UIImage(named:theImageName) {

        var myButton = UIButton(frame: CGRectMake(0, 0, theSize, theSize))

        myButton.setImage(myImage, forState: UIControlState.Normal)

        myButton.addTarget(theTarget, action: theAction, forControlEvents: UIControlEvents.TouchUpInside)

        if let myDownImage = UIImage(named: theDownImageName) {

            myButton.setImage(myDownImage, forState: UIControlState.Selected)
        }

        return UIBarButtonItem(customView: myButton)
    }

    return nil
}
1 голос
/ 16 августа 2011

Вы также можете установить напрямую из XIB, поместив кнопку округлой формы на панель инструментов, затем изменив изображение этой кнопки округлой формы и установив для кнопки произвольный тип. Также сделайте фон кнопки прозрачным цветом

0 голосов
/ 19 февраля 2016

Кнопка UIButton * = [[UIButton alloc] init];

[button setImage:[UIImage imageNamed:@"settings"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(RightBarMethod:)
    forControlEvents:UIControlEventTouchUpInside];
[button setFrame:CGRectMake(0, 0, 20, 20)];

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc]
                           initWithCustomView:button];

self.navigationItem.rightBarButtonItem = barButtonItem;
...