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