小编swi*_*fty的帖子

如何在SwiftUI分段选择器中更改选定的分段颜色

我想在SwiftUI分段选择器中设置选定的分段颜色,并将文本颜色更改为白色。

我尝试将两种修饰符用于选择器视图,还尝试从外观代理中修改色调颜色。不幸的是,它们似乎都不起作用。


import SwiftUI

struct PickerView: View {

    @State var pickerSelection = 0

    init() {
        UISegmentedControl.appearance().tintColor = UIColor.blue
    }

    var body: some View {
        Picker(selection: $pickerSelection, label: Text("")) {
            Text("Active").tag(0).foregroundColor(Color.white)
            Text("Completed").tag(1)
        }.pickerStyle(SegmentedPickerStyle()).foregroundColor(Color.orange)
    }
}
Run Code Online (Sandbox Code Playgroud)

在SwiftUI中有什么方法可以做到这一点,还是应该通过UIViewControllerRepresentable使用UISegmentedControl?

swift swiftui

6
推荐指数
2
解决办法
453
查看次数

视图关闭后,ObservedObject 视图模型仍在内存中

我在 SwiftUI 和 Combine 中的内存管理方面遇到了一些问题。

例如,如果我有一个 NavigationView,然后导航到带有 TextField 的详细视图,并在 TextField 中输入一个值并点击后退按钮,则下次我转到该视图时,TextField 具有先前输入的值。

我注意到在细节视图被关闭后视图模型仍然在内存中,这可能是 TextField 仍然保留一个值的原因。

在 UIKit 中,当关闭 ViewController 时,视图模型将被释放,然后在 ViewController 出现时再次创建。这似乎不是这里的情况。

我为此问题附上了一些最低限度的可重现代码。

import SwiftUI
import Combine

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: OtherView()) {
                Text("Press Here")
            }
        }
    }
}

struct OtherView: View {

    @ObservedObject var viewModel = ViewModel()

    var body: some View {
        VStack {
            TextField("Something", text: $viewModel.enteredText)
                .textFieldStyle(RoundedBorderTextFieldStyle())

            Button(action: {
                print("Tap")
            }) {
                Text("Tapping")
            }.disabled(!viewModel.isValid)
        }
    }
}

class ViewModel: ObservableObject …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui combine

6
推荐指数
1
解决办法
869
查看次数

SwiftUI 模态环境

我真的不明白使用模态时环境是如何工作的。看起来环境对于模态视图是分开的。

\n\n

我使用核心数据制作了一个快速示例,并将对象保存到核心数据。如果我不通过环境,则不会保存对象,并且在尝试保存对象时出现以下错误:\n操作无法完成\xe2\x80\x99。(Foundation._GenericObjCError 错误 0。)

\n\n

如果我在模式环境中传递托管对象上下文,它就会起作用。我注释掉了使它起作用的行。

\n\n

任何人都可以解释为什么会发生这种情况吗?

\n\n
\n    @FetchRequest(fetchRequest: ToDoItem.fetchAllItems()) var items\n    @Environment(\\.managedObjectContext) var managedObjectContext\n    @State var showAddModal = false\n\n\n    var body: some View {\n\n        VStack {\n\n            List(items, id: \\.name) { item in\n                Text(item.name)\n            }\n\n            Button(action: {\n                self.showAddModal.toggle()\n            }) {\n                Text("Add item")\n            }.sheet(isPresented: $showAddModal) {\n                ModalView()\n//                    .environment(\\.managedObjectContext, self.managedObjectContext)\n//                It works if the managed object context is passed in the modal\'s environment\n            }\n        }\n    }\n}\n\nstruct ModalView: View {\n\n    @State var toDoItemName: String = ""\n    @Environment(\\.presentationMode) var presentationMode\n    @Environment(\\.managedObjectContext) …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

5
推荐指数
1
解决办法
1495
查看次数

标签 统计

swift ×3

swiftui ×3

ios ×2

combine ×1