如何在iOS 14应用上使用仅适用于iOS 15版本的焦点状态?

q35jwt9p  于 2023-03-14  发布在  iOS
关注(0)|答案(1)|浏览(130)

我有一个SwiftUI应用程序也是针对iOS 14的。我想只在iOS 15版本上使用焦点状态。我不太介意iOS 14版本。因为focusState只适用于iOS 15。

@FocusState private var isUsernameFocused: Bool = false

我尝试用#available来定义,但它不起作用。同样,我只想在iOS 15机器上使用它,但我需要一种方法来声明它。
我想在按下按钮时使用它。每当我按下按钮时,我想激活文本字段的键盘。我如何在SwiftUI上实现这一点?

46scxncf

46scxncf1#

你没有说你想如何使用它,但一般的方法可以是这样的:
1.创建一个View,它将只与iOS 15兼容,并将包含@FocusState,以及封装特定于焦点的任何行为(它们可以在init上预定义或传递):

struct FocusableUsername: View {
    @FocusState private var isUsernameFocused: Bool
    @State private var username = "Anonymous"

    var body: some View {
        VStack {
            TextField("Enter your username", text: $username)
                .focused($isUsernameFocused)

            Button("Toggle Focus") {
                isUsernameFocused.toggle()
            }
        }
    }
}

1.现在,在主视图中,使用if #available(iOS 15, *显示FocusableUsername,或者只是一个常规的'TextField(或者您正在使用的任何组件):

struct MainView: View {
    var body: some View {
        if #available(iOS 15, *) {
            FocusableUsername()
        } else {
            TextField(...)
        }
    }
}

当然,您可能需要从外部控制该字段的行为,例如,您可以将主视图作为委托传递给它,或者传递一些闭包来运行--这里有许多选项。

相关问题