Tôi đang triển khai mã tùy chỉnh để xử lý nhấp chuột vào nút Trình đơn trên Điều khiển từ xa Siri. Tôi làm cách nào để tập trung chuyển sang menu tùy chỉnh khi nhấn nút menu?Tôi làm cách nào để tập trung thay đổi thành chế độ xem cụ thể trong tvOS?
Trả lời
Cuối cùng đã tự tìm ra. Bạn phải ghi đè thuộc tính preferredFoucsedView
của UIView
hoặc UIViewController
.
Trong nhanh chóng nó đi như thế này:
func myClickHandler() {
someCondition = true
self.setNeedsFocusUpdate()
self.updateFocusIfNeeded()
someCondition = false
}
override weak var preferredFocusedView: UIView? {
if someCondition {
return theViewYouWant
} else {
return defaultView
}
}
Tôi không thể nhớ làm thế nào để ghi đè lên thu khí trong Objective-C vì vậy nếu ai đó muốn gửi rằng tôi sẽ chỉnh sửa câu trả lời.
đây là mục tiêu C
- (UIView *)preferredFocusedView
{
if (someCondition) {
// this is if your menu is a tableview
NSIndexPath *ip = [NSIndexPath indexPathForRow:2 inSection:0];
UITableViewCell * cell = [self.categoryTableView cellForRowAtIndexPath:ip];
return cell;
}
return self.view.preferredFocusedView;
}
trong viewDidLoad hoặc xem bạn đã xuất hiện làm một cái gì đó như thế này:
UIFocusGuide *focusGuide = [[UIFocusGuide alloc]init];
focusGuide.preferredFocusedView = [self preferredFocusedView];
[self.view addLayoutGuide:focusGuide];
nếu bạn muốn làm điều đó khi nó lần đầu tiên ra mắt
Tôi nhận được nill cho các tế bào và tôi đang sử dụng collectionview thay vì tableview! Bất kỳ ý tưởng tại sao nó là nil? –
đây là một triển khai khác dựa trên Slayters trả lời ở trên. Nó hơi tao nhã hơn tôi nghĩ hơn là sử dụng các boolean có điều kiện.
Đặt này trong viewController bạn
var viewToFocus: UIView? = nil {
didSet {
if viewToFocus != nil {
self.setNeedsFocusUpdate();
self.updateFocusIfNeeded();
}
}
}
override weak var preferredFocusedView: UIView? {
if viewToFocus != nil {
return viewToFocus;
} else {
return super.preferredFocusedView;
}
}
Sau đó, để sử dụng nó trong mã của bạn
viewToFocus = myUIView;
điều này đã không được chấp nhận trong iOS 10. đề xuất sử dụng preferredFocusEnvironments – nyxee
@ câu trả lời elu5ion 's, nhưng trong Objective-C đầu tiên tuyên bố:
@property (nonatomic) UIView *preferredView;
Đặt các phương thức sau:
-(void)setPreferredView:(UIView *)preferredView{
if (preferredView != nil) {
_preferredView = nil;
UIFocusGuide *focusGuide = [[UIFocusGuide alloc]init];
[self.view addLayoutGuide:focusGuide];
focusGuide.preferredFocusedView = [self preferredFocusedView];
[self setNeedsFocusUpdate];
[self updateFocusIfNeeded];
}
_preferredView = preferredView;
}
- (UIView *)preferredFocusedView {
if (_preferredView) {
return _preferredView;
}
return self.view.preferredFocusedView;
}
Đây là một tốt đẹp chút Swift đoạn 2 copy/paste:
var myPreferredFocusedView: UIView?
override var preferredFocusedView: UIView? {
return myPreferredFocusedView
}
func updateFocus(to view: UIView) {
myPreferredFocusedView = napDoneView
setNeedsFocusUpdate()
updateFocusIfNeeded()
}
Sử dụng nó như thế này:
updateFocus(to: someAwesomeView)
Đối với ios 10 bạn nên sử dụng preferredFocusEnvironments thay vì preferredFocusedView.
Trong ví dụ dưới đây nếu bạn muốn tập trung vào btnEnglish thì hãy xem mã bên dưới.
@IBOutlet weak var btnEnglish:UIButton!
override var preferredFocusEnvironments : [UIFocusEnvironment] {
//condition
return [btnEnglish]
}
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsFocusUpdate()
self.updateFocusIfNeeded()
}
Đây phải là câu trả lời được chấp nhận ngay bây giờ vì 'preferredFocusedView' đang bị khấu hao. –
- 1. Animate/thu phóng chế độ xem tùy chỉnh được tập trung trong tvOS
- 2. Làm thế nào để loại bỏ bàn phím trong UISearchController khi thay đổi tập trung trong tvos?
- 3. Làm cách nào để chuyển đổi chế độ xem từ trong chế độ xem?
- 4. Làm cách nào để giải thể hoạt ảnh khi thay đổi chế độ xem trên iphone?
- 5. Android: Thay đổi hình ảnh cho một mục cụ thể trong chế độ xem danh sách
- 6. Làm cách nào để tôi có thể thực hiện `Chế độ xem 'để điền vào` RelativeLayout`?
- 7. Làm cách nào tôi có thể gọi một chế độ xem khác trong chế độ xem couchdb?
- 8. ViewModel của tôi có thể xem ObservableCollection của Chế độ xem hoặc Chế độ xem không?
- 9. Làm cách nào để tôi có thể thực hiện chế độ xem lịch trong Swift
- 10. Làm cách nào để thay đổi chế độ xem gói trong IntelliJ?
- 11. Làm cách nào để chuyển đổi các tọa độ cửa sổ tương ứng với một chế độ xem cụ thể?
- 12. cách thay đổi chế độ xem tab điều hướng mặc định thành chế độ xem tab tùy chỉnh?
- 13. Làm cách nào để chuyển html thô sang chế độ xem khung công cụ?
- 14. Làm cách nào để thay đổi loại Bộ điều khiển của Chế độ xem Bảng thành Bộ điều khiển Chế độ xem thông thường?
- 15. Laravel Excel làm cách nào để tải chế độ xem vào hàng hoặc ô cụ thể?
- 16. Làm cách nào để lấy khung của chế độ xem trong chế độ xem khác?
- 17. Tôi có thể gọi chế độ xem từ trong chế độ xem khác không?
- 18. Làm cách nào để đóng gói một chế độ xem MonoTouch.Dialog thành bộ điều khiển chế độ xem?
- 19. Xử lý thay đổi hiển thị chế độ xem mà không ghi đè chế độ xem
- 20. Tôi làm cách nào để sử dụng UIButton trong chế độ xem bổ sung UICollection?
- 21. làm thế nào để thay đổi chỉ thị @model thành một mô hình khác trong chế độ xem dao cạo?
- 22. Có cách nào để bù đắp chế độ xem từ trung tâm trong Android không?
- 23. Chúng tôi có thể thay đổi kích thước chế độ xem UIDatePicker trong iPhone
- 24. Chế độ xem không làm mới sau khi thay đổi
- 25. Cách đặt Chế độ xem thành Bó
- 26. Làm cách nào để thay đổi thông số tuyến đường nội bộ cụ thể trong Angular2
- 27. Cách thêm UIImagePickerController làm chế độ xem phụ thay vì Chế độ xem Phương thức
- 28. Làm cách nào để truy cập chế độ xem chân trang hoặc tiêu đề của phần cụ thể trong UITableView?
- 29. iOS làm cách nào để làm cho chế độ xem phụ của chế độ xem trong suốt mờ đục?
- 30. tvos: UITextView tập trung xuất hiện như phim App
Cảm ơn bạn. Tôi đã xem xét việc làm như thế này, nhưng có vẻ như soooooo lộn xộn để đặt tất cả những "someConditions" trên khắp nơi. Sẽ dễ dàng hơn rất nhiều nếu bạn chỉ có thể setPreferredFocusedView ... –
Nhưng, chờ đã. Làm thế nào để làm việc này khi tôi muốn thay đổi tập trung vào một viewcontroller? –
Tôi đồng ý. Hy vọng rằng họ sẽ thêm nó. Ngoài ra để tránh tất cả 'someCondition', tôi đã thêm thuộc tính' viewToFocus' 'UIView' vào viewController của mình. Sau đó, trong getter, tôi kiểm tra nếu xem đó không phải là nil và trả lại nó. Nếu không, hãy quay lại chế độ xem mặc định. – Slayter