Подтвердить что ты не робот

IOS7, когда UIsearchbar добавлен в UINavigationBar, не отображая кнопку отмены

Я добавляю UISearchBar выше UINavigationBar и устанавливаю UIsearchbar showCancelButton ДА, отлично работаю в iOS6, но в iOS7 не отображается кнопка отмены.  Я использовал ниже фрагмент кода

UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 600, 44)];
searchBar.showsCancelButton = YES;
searchBar.translucent = NO;
[searchBar setTintColor:[UIColor redColor]];
searchBar.backgroundColor = [UIColor yellowColor];
[self.navigationController.navigationBar   addSubview:searchBar];
4b9b3361

Ответ 1

По какой-то причине iOS7 не отображает кнопку отмены при добавлении в панель навигации. Это также происходит, если вы попытаетесь установить его как titleView элемента navigationItem.

Вы можете обойти эту проблему, сначала включив UISearchBar в другой UIView. Вот как я делаю это как titleView:

UISearchBar *searchBar = [UISearchBar new];
searchBar.showsCancelButton = YES;
[searchBar sizeToFit];
UIView *barWrapper = [[UIView alloc]initWithFrame:searchBar.bounds];
[barWrapper addSubview:searchBar];
self.navigationItem.titleView = barWrapper;

Ответ 2

У меня была аналогичная проблема, на панели поиска iPhone с отменой кнопки хорошо показывают, но на iPad кнопка отмены не показывалась. Объединение UIsearchBar в UIView, например, с проблемой стиля броска @Rodskjegg. На iPad UIsearchBar устанавливают его как titleView элемента navigationItem и добавляем UIBarButtonItem к setRighttBarButtonItem как UIBarButtonSystemItemCancel.

    [self.navigationItem setLeftBarButtonItem:Nil animated:YES];
    self.navigationItem.titleView = self.searchBar;

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
    {
        UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(searchBarCancelButtonClicked:)];

        [self.navigationItem setRightBarButtonItem: cancelButton animated:YES];
    }
    else {
        [self.navigationItem setRightBarButtonItem: nil animated:YES];
    }

Ответ 3

С iOS 7 вы можете просто установить свойство displaysSearchBarInNavigationBar на YES на UISearchDisplayController, чтобы автоматически получить UISearchbar в NavigationBar.

Ответ 4

Да В iOS 7 кнопка расположена на экране, но ее название может быть невидимым Мое решение состояло в том, чтобы установить стиль поиска в "Минимальный" и выбрать цвет оттенка штриха для цвета текста "Отмена" в IB

enter image description here

И результат в симуляторе:

enter image description here

Ответ 5

Я столкнулся с той же проблемой, вот мое решение, надеюсь, что это поможет.

Некоторые дополнительные объяснения: Я узнал, что отправив setShowsCancelButton:animated: в searchBar, он просто работает как магия. Самый простой способ добавить строку поиска в панель навигации - self.navigationItem.titleView = self.searchBar;. Соответствующее время для вызова setShowsCancelButton:animated: находится в методах делегата searchBarTextDidBeginEditing: и searchBarTextDidEndEditing:, поэтому не забудьте указать self как делегата searchBar.

- (void)viewDidLoad
{
    self.navigationItem.titleView = self.searchBar;
}

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    [searchBar setShowsCancelButton:YES animated:YES]; 
}

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
    [searchBar setShowsCancelButton:NO animated:YES];
}

Ответ 6

У меня была та же проблема, на iPhone отмена поиска была показана хорошо, но на iPad этого не произошло.

Обходной путь обертывания UISearchBar в другом UIView не помог мне, поскольку он имел разный внешний вид и неправильную ширину при вращении.

Мое решение является простым: используйте поиск БЕЗ отмены и добавьте отмену как UIBarButtonItem.

Ответ 7

Внедрите делегат панели поиска и используйте это:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    searchBar.showsCancelButton = YES;
}