iPhone: добавление кнопки «Информация» в качестве элемента правой кнопки на панели навигации в коде - PullRequest
15 голосов
/ 16 августа 2010

Кто-нибудь имел успех, создав информационную кнопку (курсив 'i' в кружке) в коде (читай: без Interface Builder), а затем назначив ее в качестве элемента правой кнопки панели навигации?

Я посмотрел везде и даже не могу найти, как создать информационную кнопку в коде.Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

33 голосов
/ 16 августа 2010
UIButton *btn = [UIButton buttonWithType:UIButtonTypeInfoDark];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
6 голосов
/ 10 апреля 2013

Вот довольно симпатичное решение, которое, я думаю, охватывает все вопросы, поднятые людьми в комментариях выше. Аналогичен принятому ответу, но этот подход включает дополнительный интервал (путем изменения фрейма), чтобы кнопка не разбивалась о правый край.

// Create the info button
UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight];

// Adjust the frame by adding an addition 10 points to its width so the button is padded nicely
infoButton.frame = CGRectMake(infoButton.frame.origin.x, infoButton.frame.origin.y, infoButton.frame.size.width + 10.0, infoButton.frame.size.height);

// Hook the button up to an action
[infoButton addTarget:self action:@selector(showInfoScreen) forControlEvents:UIControlEventTouchUpInside];

// Add the button to the nav bar
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:infoButton];

// Also make sure to add a showInfoScreen method to your class!
1 голос
/ 21 декабря 2017

Для Свифта:

func addRightNavigationBarInfoButton() {
    let button = UIButton(type: .infoDark)
    button.addTarget(self, action: #selector(self.showInfoScreen), for: .touchUpInside)
    self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: button)
}

@objc func showInfoScreen() {
    // info bar button pressed
}
0 голосов
/ 07 августа 2015

Я думаю, это будет более полный ответ, и он должен помочь в любой ситуации:

-(void)viewDidLoad{

    //Set Navigation Bar
    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 64)];

    //Set title if needed
    UINavigationItem * navTitle = [[UINavigationItem alloc] init];
    navTitle.title = @"Title";

    //Here you create info button and customize it
    UIButton * tempButton = [UIButton buttonWithType:UIButtonTypeInfoLight];

    //Add selector to info button
    [tempButton addTarget:self action:@selector(infoButtonClicked) forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem * infoButton = [[UIBarButtonItem alloc] initWithCustomView:tempButton];

    //In this case your button will be on the right side
    navTitle.rightBarButtonItem = infoButton;

    //Add NavigationBar on main view
    navBar.items = @[navTitle];
    [self.view addSubview:navBar];

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...