2017-02-22 3 views
0

У меня возникли проблемы с перетаскиванием справа, чтобы переместить фокус с UITableView на UIButton, который находится справа и ниже таблицы. Я настроил UIFocusGuide, и я считаю, что у меня правильная геометрия. (См. Прикрепленный снимок экрана, созданный с помощью Pod VisualFocusGuide.)Проведите от UITableView до UIButton через UIFocusGuide не работает

Когда я использую встроенный QuickLook в UIFocusUpdateContext, он показывает только фокус просмотра таблицы (выделенная строка в одном цвете и другие строки другого цвета) , но это может быть потому, что в табличном представлении я могу только сосредоточиться, поэтому, возможно, этот контекст ограничен таблицей.

Я видел рекомендацию elsewhere, чтобы связать направляющую фокусировки с кнопкой, а не с видом контроллера, но это не сработало. Из отчаяния я также попытался связать фокус-гид с табличным обзором, но все равно не повезло.

Вот уместные методы. Любой свет, который может пролить, будет оценен! Благодаря!

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.view.addLayoutGuide(focusGuide) 

    self.focusGuide.widthAnchor.constraint(equalTo: self.infoButton.widthAnchor).isActive = true 
    self.focusGuide.heightAnchor.constraint(equalTo: self.tableView.heightAnchor).isActive = true 
    self.focusGuide.topAnchor.constraint(equalTo: self.tableView.topAnchor).isActive = true 
    self.focusGuide.leftAnchor.constraint(equalTo: self.infoButton.leftAnchor).isActive = true 

    self.focusGuide.preferredFocusEnvironments = [self.infoButton] 
} 

    override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) { 
    super.didUpdateFocus(in: context, with: coordinator) 

    guard let nextFocusedView = context.nextFocusedView else { return } 

    // When the focus engine focuses on the focus guide, we can programmatically tell it which element should be focused next. 
    switch nextFocusedView { 
    case self.tableView: 
     self.focusGuide.preferredFocusEnvironments = [self.infoButton] 

    case self.infoButton: 
     self.focusGuide.preferredFocusEnvironments = [self.tableView] 

    default: 
     self.focusGuide.preferredFocusEnvironments = [] 
    } 
} 

enter image description here

ответ

0

Я только что получил эту работу. Я добавил еще одно руководство по фокусировке под табличным представлением слева от кнопки. Я оценил его как ширину таблицы и высоту кнопки. Я сделал свой preferredFocusEnvironment tableView. Но этого было недостаточно. Я тогда удалил метод didUpdateFocus, а левый и правый прокрутки начали работать! Вот полученный код:

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.view.addLayoutGuide(focusGuide1) 
    self.focusGuide1.topAnchor.constraint(equalTo: self.tableView.topAnchor).isActive = true 
    self.focusGuide1.leftAnchor.constraint(equalTo: self.infoButton.leftAnchor).isActive = true 
    self.focusGuide1.heightAnchor.constraint(equalTo: self.tableView.heightAnchor).isActive = true 
    self.focusGuide1.widthAnchor.constraint(equalTo: self.infoButton.widthAnchor).isActive = true 
    self.focusGuide1.preferredFocusEnvironments = [self.infoButton] 

    self.view.addLayoutGuide(focusGuide2) 
    self.focusGuide2.topAnchor.constraint(equalTo: self.infoButton.topAnchor).isActive = true 
    self.focusGuide2.leftAnchor.constraint(equalTo: self.tableView.leftAnchor).isActive = true 
    self.focusGuide2.heightAnchor.constraint(equalTo: self.infoButton.heightAnchor).isActive = true 
    self.focusGuide2.widthAnchor.constraint(equalTo: self.tableView.widthAnchor).isActive = true 
    self.focusGuide2.preferredFocusEnvironments = [self.tableView] 
} 
Смежные вопросы