2015-11-18 3 views
1

У меня есть ViewController, который имеет textSearchTableView: UITableView и SearchBar: UISearchBarDissmissing клавиатуры без вызова didSelectRowAtIndexPath

Я добавил UITapGestureRecognizer к dissmis клавиатуры

override func viewDidLoad() { 

// ... 

self.tap = UITapGestureRecognizer(target: self, action: "DissmissKeyboard") 
     self.tap.delegate = self 
     self.view.addGestureRecognizer(self.tap) 
// ... 

} 

func DissmissKeyboard() 
    { 
     view.endEditing(true) 
    } 

я добавил эту функцию, чтобы предотвратить нарушение (didSelectRowAtIndexPath) после выбора ячейки

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool { 
     if touch.view.isDescendantOfView(self.textSearchTableView) { 
     return false 
     } 
     return true 
    } 

Но проблема: когда клавиатура включена и я хочу dissmiss его,

если я нажимаю на textSearchTableView, (didSelectRowAtIndexPath) будет работать

Как я могу dissmiss клавиатуры, если я нажимаю на tableView без вызова (didSelectRowAtIndexPath)? и я не хочу нарушать эту функцию, а

Я надеюсь, что я описываю проблему наилучшим образом Спасибо большое

+0

В вашем случае его плохая идея отклонить клавиатуру, если пользователь нажимает в любом месте экрана. Куда бы нажал пользователь? Это должно быть одна из строк таблицы и, следовательно, ваша проблема. Я бы поставил кнопку на клавиатуре и приложил к ней resiginFirstResponder. –

ответ

2

Перепишите ваш didSelectRowAtIndexPath так:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    if (self.searchBar.isFirstResponder()) 
    { 
     self.searchBar.resignFirstResponder() 
    } 
    else 
    { 
     //Do something here 
    } 
} 

В качестве альтернативы: Мы обычно используем этот подход в tableviews.

self.tableView.keyboardDismissMode = .OnDrag 

Это отключит клавиатуру, когда в виде таблицы начнется перетаскивание.

+0

Вопрос явно задает вопрос, как это сделать, не вызывая '' '' didSelectRowAtIndexPath'''. Как это может помочь? – SmokeDispenser

+0

Спасибо, что это сработало, но когда я увольняю клавиатуру, ячейка выбирается, поэтому я добавил эту строку в if clause tableView.deselectRowAtIndexPath (indexPath, анимированный: true), но также и ячейка получает выделение, а затем отменяется – Maha

+0

. Проверьте обновленный ответ и позвольте я знаю, если это поможет. – Nishant

0

Как насчет вас есть обратный делегат ноль вашего Tableview для

- (NSIndexPath *)tableView:(UITableView *)tableView 
willSelectRowAtIndexPath:(NSIndexPath *)indexPath 

As willSelectRowAtIndexPath - это, вероятно, то, что вы хотите, но не то, что вы просили: отклонение клавиатуры выполняется путем отправки первого ответчика resignFirstResponder, чтобы ответить на фактический вопрос.

+0

большое спасибо за ваш ответ – Maha

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