views:

100

answers:

1

Hello All,

In my application, I need to do some activity i.e pushing otherview controller,when I click a UISearchbar which is added on view.

what is best approach to achive this.

As one of thing is when we click UISearchbar "searchBarTextDidBeginEditing" get fired,but with my scenario when I push view controller in "searchBarTextDidBeginEditing" and come back searchBarTextDidBeginEditing get called again, so seems it is not ideal place to push view controller.

This is maincontroller

// Search bar
  iSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 40)];
  iSearchBar.delegate = self;
  iSearchBar.showsCancelButton = NO;
  iSearchBar.autocorrectionType = UITextAutocorrectionTypeNo;
  iSearchBar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
  [self addSubview:iSearchBar];

when I click UISearchBar then it calls

   - (void)searchBarTextDidBeginEditing:(UISearchBar*)searchBar
   {
   [self ShowMySearch];
   }

In ShowMySearch , I am pushing some other controller lets say searchcontroller and when pop this searchcontroller and come back to maincontroller "searchBarTextDidBeginEditing" get call again and searchcontroller is pushed again and causing issue. this behavior is seen only on 3.1.1

Thanks,

Sagar

A: 

Hello,

I think calling [self ShowMySearch] in "searchBarTextDidBeginEditing" is a bit too late. I suppose that "searchBarTextDidBeginEditing" is called on response to the search bar becoming first responder. Since it is the first responder when the search controller is pushed, it probably become first responder again when your search controller is poped out...thus calling "searchBarTextDidBeginEditing" once again.

To achieve this, I'd use :

  • (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar

This method is called after the search bar is tapped but before it becomes the first responder. And if you return NO, it will never become the first responder :

- (BOOL)searchBarShouldBeginEditing:(UISearchBar*)searchBar {
    [self ShowMySearch];
    return NO;
}

Let me know if this works !

Eric MORAND
Thanks Eric. It works perfectly.
Sagar Mane