tvOS навигация по элементам пользовательского интерфейса

В настоящее время я разрабатываю для tvOS, и я добавил UISegmentedControl, он автоматически фокусируется механизмом фокусировки tvOS. Когда я добавил UIButton, это стало первым выделенным элементом.

Как мне установить первый сфокусированный элемент и иметь возможность перемещаться между ними?


person jbehrens94    schedule 04.01.2016    source источник


Ответы (1)


Добавьте свойство preferredFocusedView только для чтения в ваш контроллер представления, которое возвращает представление, которое вы хотите сфокусировать:

override weak var preferredFocusedView: UIView? {
    get {
        return segmentedControl
    }
}
person Dave Wood    schedule 04.01.2016
comment
И как мне перейти к другому элементу пользовательского интерфейса? Например, предпочтительнымFocusedView является UISegmentedControl, и я хочу «пролистнуть» до UIButton? - person jbehrens94; 04.01.2016
comment
Механизм фокусировки должен справиться с этим за вас. Однако на практике я столкнулся с проблемами, когда виды не совпадают по горизонтали или по вертикали. Вы можете помочь механизму фокусировки, добавив несколько объектов UIFocusGuide, чтобы они указывали на другие представления. Где они будут размещены, зависит от вашего макета. - person Dave Wood; 04.01.2016
comment
Я нашел руководство по UIFocusGuide, но получил неожиданные результаты. При настройке layoutAnchors focusGuide UIFocusGuide помещается сразу справа от моего UISegmentedControl. Но он должен быть точно под UISegmentedControl и справа от моего UIButton. - person jbehrens94; 04.01.2016
comment
Это происходит при использовании этого кода: self.view.addLayoutGuide(focusGuide) self.focusGuide.leftAnchor.constraintEqualToAnchor(self.choirSwitch.leftAnchor).active = true self.focusGuide.topAnchor.constraintEqualToAnchor(self.playButton.topAnchor).active = true self.focusGuide.widthAnchor.constraintEqualToAnchor(self.choirSwitch.widthAnchor).active = true self.focusGuide.heightAnchor.constraintEqualToAnchor(self.playButton.heightAnchor).active = true - person jbehrens94; 04.01.2016
comment
это то, что вы на самом деле говорите ему делать. Попробуйте изменить верхнюю привязку focusGuide на нижнюю привязку кнопки, чтобы она находилась внизу. Еще один трюк, который вы можете попробовать, это добавить четкое представление в IB, где вы хотите, чтобы направляющая фокуса была, и вместо этого использовать ее якоря. - person Dave Wood; 04.01.2016