Иногда нужно в кастомном 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];
Внимательный программист встрепенется: «Что значит «примерно»???» Ответ прост — обе кнопочки по бокам растягиваются на одинаковую длинну, а за счет того, что наши кнопочки различны по длинне, получится смещение одной кнопочки в сторону более «короткой».
Вот и все волшебство. Спасибо за внимание!
