Кнопка отмены панели поиска не работает - PullRequest
6 голосов
/ 09 мая 2011

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

это мой вид панели поиска, видите, что кнопка отмены. Она не включена

this is my search bar view.see that cancel button.It is not enabled

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


    newSearchBar.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;

    NSLog(@"search begin edit") ;

    //searchString = searchBar.text;

    //NSLog(@"print did edit searchstring : %@", searchString) ;

    for(UIView *view in [searchBar subviews])       
    {

        //shareItemId =newSearchBar.text;

        if([view isKindOfClass:[NSClassFromString(@"UINavigationButton") class]]) {
            [(UIBarItem *)view setTitle:@"Done"];

        }
        }

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
    NSLog(@"searchBarTextDidEndEditing:");


    [searchBar resignFirstResponder];
    //[self dismissModalViewControllerAnimated:YES];
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    NSLog(@"searchBarSearchButtonClicked");


    searchString = searchBar.text;
    NSLog(@"search %@", searchBar.text);
    [newSearchBar setShowsCancelButton:NO animated:YES];

    [searchBar resignFirstResponder];
    //[self dismissModalViewControllerAnimated:YES];
}

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar

{  
    NSLog(@" searchBarCancelButtonClicked");


    [searchBar resignFirstResponder];

     shareItemName =newSearchBar.text;

    [self dismissModalViewControllerAnimated:YES];

}

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {

    NSLog(@"searchBarShouldBeginEditing");


    [newSearchBar setShowsCancelButton:YES animated:YES];
    return YES;
}

Это мои делегаты для этого

Пожалуйста, проверьте мой код и дайте мне ответ. Мне нужно активировать кнопку «Отмена», когда представление загружено, и его действие вернется к предыдущему виду

Мне нужно вот так

enter image description here

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

Ответы [ 4 ]

6 голосов
/ 10 мая 2011

Вам нужно установить UISearchDisplayController в состояние ACTIVE, например:

 [mySearchDisplayController setActive:YES animated:YES];

или более просто:

 mySearchDisplayController.active = YES;
4 голосов
/ 09 мая 2011

Я предполагаю, что Apple создала UISearchBar таким образом, что кнопка отмены отключена, если текстовое поле поиска пустое или нет первого респондента.

Это имеет смысл, так как не следует использовать «Отмена"кнопка для другой цели, чем на самом деле отмена поиска.и так как нет поиска для отмены - кнопка отключена.

Если вы все еще хотите, чтобы кнопка была активна сразу после представления представления, вы можете позвонить с viewWillAppear: до [mySearchBar becomeFirstResponder];

Это приведет к появлению клавиатуры и активации кнопки.И затем, если пользователь нажал «Отмена», вы можете перехватить его, чтобы вернуться к предыдущему виду.(Я не уверен, понравится ли Apple такое поведение).

Пример кода:

-(void) viewWillAppear : (BOOL) animated
{
    [super viewWillAppear:animated];
    // Make keyboard pop and enable the "Cancel" button.
    [self.mySearchBar becomeFirstResponder];
}
3 голосов
/ 09 марта 2012

Вот что я сделал, чтобы всегда активировать кнопку отмены, даже если поле поиска не является первым респондентом.

Я вызываю этот метод всякий раз, когда вызываю resignFirstResponder в поле поиска

- (void)enableCancelButton {
    for (UIView *view in self.searchBar.subviews) {
        if ([view isKindOfClass:[UIButton class]]) {
            [(UIButton *)view setEnabled:YES];
        }
    }
}

Это работает, но я не уверен, пройдет ли он проверку App Store, поэтому используйте его на свой страх и риск.Кроме того, это, вероятно, работает, только если кнопка отмены является единственной кнопкой, которую вы используете в поле поиска.

0 голосов
/ 17 декабря 2015

Это работает для включения кнопки отмены с iOS 8:

private func enableButtonsInSubviews(view: UIView) {
    if let view = view as? UIButton {
        view.enabled = true
    }

    for subview in view.subviews {
        enableButtonsInSubviews(subview)
    }
}
...