#ios #backbarbuttonitem
#iOS #backbarbuttonitem
Вопрос:
Я новичок в разработке iOS. Я использую следующий код для установки моего backBarButtonItem —
UIBarButtonItem *temporaryBarButtonItem=[[UIBarButtonItem alloc] init];
temporaryBarButtonItem.title=@"Back";
self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
[temporaryBarButtonItem release];
Я также хочу, чтобы он выполнял другую функцию, помимо возврата назад. Возможно ли это? Или мне нужна другая кнопка для сохранения?
Комментарии:
1. Вы можете практически сделать это в своем
viewDidDisapper
viewWillDisappear
методе or . Если это представление может возвращаться только назад и не представляет никаких представлений, то это должно сработать.2. Это имеет смысл. Вы хотите сделать это в качестве ответа, чтобы я мог его принять?
Ответ №1:
Вы можете практически сделать это в своем viewDidDisappear
viewWillDisappear
методе or .
Если это представление может возвращаться только назад и не представляет никаких представлений, то это должно сработать.
Однако, если вы планируете представить подпредставление, модальное представление, углубиться в иерархию навигации или выполнить другие операции просмотра, которые вызовут viewDidDisapper
вызов, тогда вам нужно как-то отделить логику кода обратной кнопки.
Например, если вы представите модальное представление из этого представления, вы можете проверить, равно ли self.modalViewController
оно нулю, если да, то у вас нет модального представления, и вы можете безопасно выполнить код обратной кнопки. Если оно не равно нулю, то у вас присутствует модальное представление, и вам не следует выполнять код обратной кнопки. ( viewWillDisappear
следует зарегистрировать контроллер модального представления как not-nil).
Ответ №2:
Очень просто, попробуйте это!
[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(myCoolAction:)];
Затем все, что вам нужно сделать, это изменить myCoolAction: на соответствующий метод в вашем контроллере представления и обработать его. Наслаждайтесь!
РЕДАКТИРОВАТЬ: О, если вы хотите использовать это для backBarButtonItem, это не будет работать так, как вы ожидаете. Система не будет вызывать вашу цель / действия для backBarButtonItem. Они очищаются после назначения backBarButtonItem.
Один из способов справиться с этим — слишком подключить ваш UINavigationController в качестве делегата. Затем в вашем
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
Метод вы можете выполнить там какое-то пользовательское поведение.
Комментарии:
1. Как указал @JoePasq, вы также можете использовать viewDidAppear и viewDidDisappear . Однако эти методы будут вызываться при других обстоятельствах, отличных от навигации, таких как presentModalViewController: -> dismissModalViewControllerAnimated: .
Ответ №3:
Строго говоря, это невозможно сделать с помощью UIKit.
Смотрите Документы по backBarButtonItem
:
Цель и действие заданного вами элемента кнопки задней панели должны быть равны нулю. Значением по умолчанию является элемент кнопки панели, отображающий заголовок элемента навигации.
Обходной путь заключается в том, чтобы указать leftBarButtonItem
и прикрепить любое пользовательское поведение, которое вам требуется, путем прикрепления @selector
цели.
Сложность заключается в самом изображении кнопки. Как вы знаете, по умолчанию используется не прямоугольная кнопка. Скорее он имеет форму стрелки слева. Для этого вам нужно будет установить пользовательское изображение, чтобы кнопка отображалась по умолчанию.
Для этого есть множество ресурсов, включая этот, чтобы извлечь все иллюстрации UIKit:
Ответ №4:
Вы можете добавить UIBarButtonItem в xib и добавить туда событие обработчика.
Еще создайте UIBarButtonItem с пользовательским представлением, которое является UIButton, и добавьте обработчик событий.
Ответ №5:
Вы должны быть в состоянии сделать что-то подобное вместо использования viewDidDisappear
или viewWillDisappear
.
Поместите это в viewDidLoad
:
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleDone target:self action:@selector(cancelButtonAction:)];
self.navigationItem.leftItemsSupplementBackButton = NO;
Затем вы можете создать метод cancelButtonAction cancelButtonAction
для вашего пользовательского кода и обратной функциональности, например:
- (void)cancelButtonAction:(id)sender {
//Your custom code goes here...
//This will perform the back functionality if using a Navigation Controller
[self.navigationController popViewControllerAnimated:YES];
}
Примечание: в конечном итоге будет использоваться прямоугольная кнопка без стрелки.