appletv как реагировать на событие смены фокуса - PullRequest
1 голос
/ 15 марта 2020

Я пытался изменить цвет текста кнопки на AppleTV при изменении фокуса, и это мой код (см. Ниже).

К сожалению, код с if focus .. никогда не вызывается. Что я делаю не так?

Спасибо за любую помощь!

struct ContentView: View {

    @State var textColor : Color = .white

    var body: some View {
        VStack {
            Button(action: {
                self.textColor = .black
            }) {
                Text("tap me")
            }
            .focusable(true) { (focus) in
                if focus {
                    self.textColor = .blue
                } else {
                    self.textColor = .green
                }
            }
            Button(action: {
                self.textColor = .black
            }) {
                Text("another tap me")
            }
            .focusable(true) { (focus) in
                if focus {
                    self.textColor = .blue
                } else {
                    self.textColor = .green
                }
            }
        }
    }
}

1 Ответ

2 голосов
/ 15 марта 2020

.focusable добавляет возможность для элементов, которые не могут быть сфокусированы по своей природе, например Text (или Image), но Button фокусируется как есть, поэтому ничего не происходит.

Следующие модификации вашего примера работают (протестировано с Xcode 11.2):

var body: some View {
    VStack {
        Text("Focusable").foregroundColor(textColor)
        .focusable(true) { (focus) in
            if focus {
                self.textColor = .blue
            } else {
                self.textColor = .green
            }
        }

        Button(action: {
            self.textColor = .black
        }) {
            Text("Button")
        }
    }
}
...