Несколько элементов UIBarButton в UINavigationBar - PullRequest
24 голосов
/ 24 февраля 2011

Как создать несколько кнопок на панели навигации?

Ответы [ 6 ]

75 голосов
/ 28 ноября 2011

Начиная с iOS 5, теперь вы можете сделать это, используя setLeftBarButtonItems:animated: или setRightBarButtonItems:animated:

48 голосов
/ 24 февраля 2011

Вы должны использовать UIToolbar и установить панель инструментов с кнопками:

// create a toolbar where we can place some buttons
UIToolbar *toolbar = [[UIToolbar alloc]
                        initWithFrame:CGRectMake(0, 0, 100, 45)];
[toolbar setBarStyle: UIBarStyleBlackOpaque];

// create an array for the buttons
NSMutableArray *buttons = [[NSMutableArray alloc] initWithCapacity:3];

// create a standard save button
UIBarButtonItem *saveButton = [[UIBarButtonItem alloc]
    initWithBarButtonSystemItem:UIBarButtonSystemItemSave
    target:self
    action:@selector(saveAction:)];
saveButton.style = UIBarButtonItemStyleBordered;
[buttons addObject:saveButton];

// create a spacer between the buttons
UIBarButtonItem *spacer = [[UIBarButtonItem alloc]
    initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
    target:nil
    action:nil];
[buttons addObject:spacer];

// create a standard delete button with the trash icon
UIBarButtonItem *deleteButton = [[UIBarButtonItem alloc]
    initWithBarButtonSystemItem:UIBarButtonSystemItemTrash
    target:self
    action:@selector(deleteAction:)];
deleteButton.style = UIBarButtonItemStyleBordered;
[buttons addObject:deleteButton];

// put the buttons in the toolbar and release them
[toolbar setItems:buttons animated:NO];

// place the toolbar into the navigation bar
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]
                                           initWithCustomView:toolbar];
3 голосов
/ 24 февраля 2011
    you have to create a view with as much button you required and have to add them on navigation button like following :

    UIView *parentView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 60, 44)];
        UIButton *infoButton1 = [[UIButton alloc] initWithFrame:CGRectMake(0, 6, 30, 32)];
        [infoButton1 setBackgroundImage:[UIImage imageNamed: @"navbtn.png"] forState:UIControlStateNormal];
        [infoButton1 setTitle:@"Back" forState:UIControlStateNormal];
        infoButton1.titleLabel.font = [UIFont systemFontOfSize:13.0f];
        infoButton1.titleLabel.textColor = [UIColor whiteColor];
        [infoButton1 addTarget:self action:@selector(backBarButtonClicked) forControlEvents:UIControlEventTouchUpInside];
        [parentView1 addSubview:infoButton1];
        [infoButton1 release];

UIButton *infoButton2 = [[UIButton alloc] initWithFrame:CGRectMake(30, 6, 30, 32)];
        [infoButton2 setBackgroundImage:[UIImage imageNamed: @"navbtn.png"] forState:UIControlStateNormal];
        [infoButton2 setTitle:@"Back" forState:UIControlStateNormal];
        infoButton2.titleLabel.font = [UIFont systemFontOfSize:13.0f];
        infoButton2.titleLabel.textColor = [UIColor whiteColor];
        [infoButton2 addTarget:self action:@selector(backBarButtonClicked) forControlEvents:UIControlEventTouchUpInside];
        [parentView1 addSubview:infoButton2];
        [infoButton2 release];
        UIBarButtonItem *customBarButtomItem1 = [[UIBarButtonItem alloc] initWithCustomView:parentView1];
        [parentView1 release];
        self.navigationItem.leftBarButtonItem = customBarButtomItem1;
        [customBarButtomItem1 release];`enter code here`
2 голосов
/ 10 апреля 2011

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

Если вы вместо этого используете второй набор UINavigationBar с UINavigationItem, который имеетназвание ноль и нужные кнопки, вы можете добавить больше кнопок и панель, которая визуально соответствует оригиналу.

1 голос
/ 12 сентября 2016

Для iOS7 и выше, это правильный способ сделать это.Нет необходимости в глупости UIToolbar.

- (void)viewDidLoad {

    [super viewDidLoad];
    [self configureView];

    // create three funky nav bar buttons
    UIBarButtonItem *one = [[UIBarButtonItem alloc]initWithTitle:@"One" style:UIBarButtonItemStylePlain target:self action:@selector(testMethod)];
    UIBarButtonItem *two = [[UIBarButtonItem alloc]initWithTitle:@"Two" style:UIBarButtonItemStylePlain target:self action:@selector(testMethod)];
    UIBarButtonItem *three = [[UIBarButtonItem alloc]initWithTitle:@"Three" style:UIBarButtonItemStylePlain target:self action:@selector(testMethod)];

    // create a spacer
    UIBarButtonItem *space = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:nil];
    space.width = 30;

    NSArray *buttons = @[one, space, two, space, three];

    self.navigationItem.rightBarButtonItems = buttons;
}

enter image description here

Я ненавижу помещать ссылки в качестве ответов на SO, поскольку они могут умереть в любое время, поэтому я добавил соответствующий код, взятый из ЗДЕСЬ

0 голосов
/ 26 февраля 2013
- (void)viewWillAppear
{

    // get a view and :
    [self.navigationController.navigationBar addSubView:yourView];

}
...