2013-05-06 2 views
1

Это мой первый вопрос о Stackoverflow. Я широко использовал SO во время кодирования универсального приложения iOS.UISearchBar не фокусируется на iPad split view

Я зашел в тупик с вопросом о UISearchBar: У меня есть универсальное приложение с таблицей и панелью поиска. На iPhone, tableview является основным контроллером представления, на iPad, это masterViewController splitViewController. Существуют разные XIB для двух устройств, но они имеют один и тот же код реализации. Панель поиска работает отлично, за исключением случаев, когда я сначала просматриваю таблицу.

Когда я активировать SearchBar с помощью кнопки на iPhone с

[self.searchBar becomeFirstResponder]; 

таблицы прокручивается весь путь вверх, Searchbar приходит в поле зрения, клавиатура появляется, и я могу начать печатать. Хорошо.

На iPad, где табличное представление является частью UISplitView, когда я вызываю startFirstResponder, табличное представление НЕ прокручивается, панель поиска не появляется, и я не контролирую панель поиска (и не могу нажмите кнопку «Отмена», так как я ее не вижу). Функция SearchDisplayController активирована, хотя из-за того, что табличное представление становится тусклым и панель навигации выходит из поля зрения.

Можете ли вы дать мне ключ, где искать? Я убедился, что все проводные вверх в XIb ...

Приветствия, Боб

+0

Я должен был упомянуть, что self.searchbar - это IBOutlet поисковой панели, о которой идет речь. – Bob

ответ

1

Я нашел обходное решение, которое работает на данный момент, но немного странно, что обходной путь необходим только для iPad ... Просто переместите начало границ tableView на 0,0, прежде чем вызвать startFirstResponder на панели поиска. На iPhone это происходит «автоматически».

CGRect newBounds = self.mainTableView.bounds; 
    newBounds.origin.y = 0; 
    self.mainTableView.bounds = newBounds; 
0

Я скачал пример из http://blog.patrickcrosby.com/2010/04/27/iphone-ipad-uisearchbar-uisearchdisplaycontroller-asynchronous-example.html

Поставлен строка в методе

- (void)mockSearch:(NSTimer*)timer 
... 

[self.searchDisplayController.searchBar becomeFirstResponder]; 

Он работает. Надеюсь, мой пост помог вам.

Добавлено через TC комментарий: На DetailViewConroller я объявил протокол:

@protocol SearchBarController <NSObject> 
- (void) setSearchString: (NSString*) aString; 
@end 

и помещен UIButton с обработчиком:

- (IBAction) pressSomeButton: (id) sender 
{ 
    [_myPopoverController presentPopoverFromRect: CGRectMake(0, 0, 1, 1) 
              inView: self.view 
         permittedArrowDirections: UIPopoverArrowDirectionUp 
             animated: YES]; 

    [self.searchDelegate setSearchString: @"123"]; 
} 

В GenericViewController интерфейс добавлен протокол SearchBarController.

Реализован метод протокола:

- (void) setSearchString: (NSString*) aString 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.searchDisplayController.searchBar becomeFirstResponder]; 
     self.searchDisplayController.searchBar.text = aString; 
    }); 
} 

Он работает файл в портретном и ландшафтном режиме.

+0

Привет, я тоже натолкнулся на этот пример. Во-первых, я не вижу, что вы пытаетесь сделать, поскольку, когда вызывается mockSearch, вы на самом деле ищете, и поисковая панель уже является первым ответчиком, так как вы просто набрали в нем какой-то текст. Во-вторых, вы не поняли мою проблему: когда я вызываю startFirstResponder в свою панель поиска, это не видно, и я не вижу, что я набираю. Thanx за попытку помочь. – Bob

+0

Хорошо, я отредактировал свой ответ. – stosha

Смежные вопросы