Иногда нужно в кастомном UIToolbar быстро расположить кнопочки по бокам, а стандартного метода rightBarButtonItem нет. На помощь придет «волшебная» кнопка.

Предположим у нас есть такой метод, создающий и отрисовывающий наш тулбар:

-(void) createToolbar
{
    UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0, 0.0, 320, 44)];  //ваши размеры фрейма
	//Наши кнопочки
    UIBarButtonItem *callTable = [[UIBarButtonItem alloc] initWithTitle:@"Open file" style:UIBarButtonItemStyleBordered target:self action:@selector(openFile)];
	UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelMenu)];
	//"Волшебная" кнопка
	UIBarButtonItem *magicButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
	//Именно в таком порядке запихиваем в массив
    NSArray *array = [[NSArray alloc] initWithObjects: callTable, magicButton, cancelButton,nil];
    [toolbar setItems:array]; //который добавляем в тулбар
    [self.view addSubview:toolbar];
	//Убираем за собой :)
	[array release];
        [callTable release];
	[cancelButton release];
	[magicButton release];
	[toolbar release];
}

Весь фокус заключается в кнопке с именем magicButton. Нет, не из-за имени :) Это системная кнопка, которая «заполняет пустоты». Причем вы точно так же можете поместить обе видимых кнопки примерно в центр, объявив массив так:

NSArray *array = [[NSArray alloc] initWithObjects: magicButton, callTable, cancelButton, magicButton, nil];

Внимательный программист встрепенется: «Что значит «примерно»???» Ответ прост — обе кнопочки по бокам растягиваются на одинаковую длинну, а за счет того, что наши кнопочки различны по длинне, получится смещение одной кнопочки в сторону более «короткой».

Вот и все волшебство. Спасибо за внимание! :)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *