Как изменить текст кнопки «Отмена» по умолчанию, который отображается в UISearchBar + iPhone - PullRequest
26 голосов
/ 29 марта 2010

Я занимаюсь разработкой приложения, в котором я хотел изменить текст строки поиска в панели поиска. Я хотел изменить текст кнопки «Отмена», которая появляется рядом с панелью поиска. Перед вводом любой строки в строке поиска мы получим строку поиска в качестве строки по умолчанию. Я хотел изменить текст этой строки, и когда мы нажимаем на эту панель поиска, мы получаем кнопку отмены рядом с панелью поиска, и я хотел изменить текст этой кнопки отмены.

Ответы [ 14 ]

0 голосов
/ 12 февраля 2016

, если SearchBar находится в навигационной панели, код будет отличаться от обычного ответа; Вместо этого вам нужно искать подпредставления NavigationBar.

-(void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller{
UINavigationBar * navigationBar =  self.navigationController.navigationBar;

for (UIView *subView in navigationBar.subviews){
    if([subView isKindOfClass:NSClassFromString(@"UINavigationButton")]){
        [(UIButton*)subView setTitle:@"İptal" forState:UIControlStateNormal];
    }
}}

и Это работает в iOS7 +, если вы все еще не можете установить заголовок, вы должны изучить отладку представления - так я решил эту проблему.

Этот краткий учебник очень хорошо описывает ключевые моменты View-Debugging:

http://www.raywenderlich.com/98356/view-debugging-in-xcode-6

0 голосов
/ 19 января 2016

Рабочий короткий код в Swift 2.1 (протестировано на iOS7-9)

@IBOutlet weak var searchBar: UISearchBar!
func enableSearchBarCancelButton(enable: Bool, title: String? = nil) {
    searchBar?.showsCancelButton = enable
    if enable {
        if let _cancelButton = searchBar?.valueForKey("_cancelButton"),
            let cancelButton = _cancelButton as? UIButton {
                cancelButton.enabled = enable //comment out if you want this button disabled when keyboard is not visible
                if title != nil {
                    cancelButton.setTitle(title, forState: UIControlState.Normal)
                }
        }
    }
}
0 голосов
/ 10 июля 2014

Если у вас все еще есть проблемы с изменением кнопки Отмена в iOS7, это в настоящее время работает для меня:

-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller{
    self.searchDisplayController.searchBar.showsCancelButton = YES;
    UIButton *cancelButton;
    UIView *topView = self.searchDisplayController.searchBar.subviews[0];
    for (UIView *subView in topView.subviews) {
        if ([subView isKindOfClass:NSClassFromString(@"UINavigationButton")]) {
            cancelButton = (UIButton*)subView;
        }
    }
    if (cancelButton) {
      //Set the new title of the cancel button
        [cancelButton setTitle:@"Hi" forState:UIControlStateNormal];
    }
}
0 голосов
/ 05 августа 2012

Вместо того, чтобы ссылаться на закрытый класс UINavigationButton, я сделал следующее. Я надеюсь, что это будет сделано через обзор App Store!

for (id subview in searchBar.subviews) {
    if ([subview respondsToSelector:@selector(setTitle:)]) {
        [subview setTitle:@"Map"];
    }
}
...