2016-07-23 3 views
1

В настоящее время я разрабатываю приложение для macOS. У меня есть NSTableView с разными строками. Одна строка состоит из NSTextField и кнопки. Вы можете ввести идентификатор в текстовое поле, и как только вы нажмете кнопку, данные будут загружены с сервера.Фокусировка NSTextField на NSTableViewCell

Но у меня есть проблема. Я не могу сосредоточиться на управлении текстовым полем. Всякий раз, когда я нажимаю на него, ячейка фокусируется вместо этого, и вроде бы «ест» сообщение.

Когда я нажимаю элемент управления, сообщение получает едят, но когда я «перетаскиваю» текст в элементе управления, я могу сфокусировать его. Я не хочу, чтобы пользователь, чтобы сфокусировать камеру, так что я реализовал следующий обработчик события:

func tableView(tableView: NSTableView, shouldSelectRow row: Int) -> Bool 
{ 
    if tableView == self.tableViewSegments 
    { 
     if segments[row].id!.integerValue < 0 
     { 
      return false 
     } 
    } 

    return true 
} 

Это предотвращает клетки от фокусируясь, но и текстовое поле, кнопка все еще работает, хотя? Как только я отключу этот метод, я могу сфокусировать ячейку, но не текстовое поле (см. Изображение).

http://i.stack.imgur.com/0er99.png

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

ответ

1

Просто нашел обходной путь себя:

func tableViewSelectionDidChange(notification: NSNotification) 
    { 
     if notification.object != nil 
     { 
      let tableView = notification.object as? NSTableView 
      if tableView != nil && tableView!.selectedRow == 1 
      { 
       let cell = tableView?.viewAtColumn(0, row: tableView!.selectedRow, makeIfNecessary: false) as? InstallSegmentTextFieldCell 

       if cell != nil 
       { 
        // Set the focus to the textfield. 
        cell!.stravaId.becomeFirstResponder() 
        tableView!.deselectAll(nil) 
       } 
      } 
     } 
    } 
Смежные вопросы