当我输入字符时,SwiftUI中的TextField失去焦点

时间:2020-05-16 16:47:28

标签: swift swift4.2 swiftui

当我在TextField(在 ExerciseSetView 中)内输入字符时,我遇到了问题,我必须重新单击文本框以使其能够输入其他字符。如果我从“文本字段”中删除绑定,则可以流畅地输入文本。

我认为这与我的presenter类和 updateSet 函数重新创建集合实例有关,因为我必须在数组内的两个层次上替换一些值。

import React, { useState, useEffect } from "react";
import { 
    View,
    Text,
    ActivityIndicator
} from "react-native";
import { useIsFocused } from "@react-navigation/native";

const TestComp = () => {

    const [storageCheck, setStorageCheck] = useState(false);
    const [isLoaded, setIsLoaded] = useState(false);
    const isFocused = useIsFocused();

    useEffect(() => {
        const loadData = async() => {
            setStorageCheck(true);
            setIsLoaded(true);
        }
        loadData();
    }, [isFocused])


    return(
        <>
            {isLoaded ? (
                <View>
                    <Text>some data or texts..</Text>
                </View>
            ) : (
                <ActivityIndicator />
            )}
        </>
    )
}
export default TestComp;

1 个答案:

答案 0 :(得分:1)

您的代码有一些基本错误。在将此代码投入生产之前,请先研究ObservableObjectPublished的值。否则,以后很难处理此代码。

我已经更新了您的观点,这似乎可行。您没有使用ObservableObject,因为应该使用它们。只需传递ObservableObjects即可让他们为您完成绑定,而无需设置自定义绑定。

struct ExerciseView: View {

    @ObservedObject var presenter: WorkoutPresenter
    @ObservedObject var exercise: WorkoutExerciseVM

    var body: some View {
        VStack {
            VStack(alignment: .leading) {
                ForEach(exercise.sets, id: \.self) { exerciseSet in
                    ExerciseSetView(set: exerciseSet)
                }
            }
            HStack {
                Button(action: {
                    self.presenter.addSet(id: self.exercise.id)
                }) {
                    HStack {
                        Image(systemName: "plus")
                        Text("Add Set")
                    }
                }
                Button(action: {
                    self.presenter.removeSet(id: self.exercise.id)
                }) {
                    HStack {
                        Image(systemName: "minus")
                        Text("Remove Set")
                    }
                }
            }
        }
    }
}

struct ExerciseSetView: View {

    @ObservedObject var set: WorkoutExerciseSetVM

    var body: some View {
        HStack {
            Spacer()
            TextField("", text: $set.reps)
            Spacer()
            TextField("", text: $set.weight)
        }
    }
}

让我知道这是否对您有用。