小编use*_*617的帖子

使用自定义按钮扩展 SwiftUI 键盘

我正在尝试找到一种向 SwiftUI 数字键盘添加键或按钮的方法。我发现的唯一参考资料说这是不可能的。在 Swift 世界中,我添加了一个带有按钮的工具栏,用于关闭键盘或执行其他一些功能。

我什至会用顶部的按钮构建一个 ZStack 视图,但我找不到将数字键盘添加到我自己的视图的方法。

在这种情况下,我真正想做的就是在输入数据时关闭数字键盘。我首先尝试修改 SceneDelegate 以关闭点击,但只有当我点击另一个文本或文本字段视图而不是在视图的开放空间中时才有效。

window.rootViewController = UIHostingController(rootView: contentView.onTapGesture {
    window.endEditing(true)
})
Run Code Online (Sandbox Code Playgroud)

理想情况下,我会在左下角添加一个 Done 键。如果可以在 SwiftUI 中完成,最好添加一个工具栏。

在此处输入图片说明

任何指导将不胜感激。

Xcode 版本 11.2.1 (11B500)

keyboard xcode ios swiftui

23
推荐指数
4
解决办法
7737
查看次数

带有枚举源的 SwiftUI 选择器未启用

我正在尝试了解新的 SwiftUI 选择器样式,尤其是来自数组以外的来源的数据。我已经构建了一个带有枚举的选择器。我首先制作了一个只有选择器和关联枚举的简单应用程序。这按预期工作。

奇怪的是,当我将该代码复制并粘贴到另一个带有表单中其他控件的应用程序中时,选择器似乎处于非活动状态。我看到了,但不能点击它。

这是第一个应用程序(选择器工作):

struct ContentView: View {

    @State private var selectedVegetable = VegetableList.asparagus

    var body: some View {
        NavigationView {
            Form {
                Section {
                    Picker(selection: $selectedVegetable, label: Text("My Vegetables")) {
                        ForEach(VegetableList.allCases) { v in
                            Text(v.name).tag(v)
                            //use of tag makes no difference
                        }
                    }
                }
            }
            .navigationBarTitle("Picker with Enum")
        }
    }
}

enum VegetableList: CaseIterable, Hashable, Identifiable {
    case asparagus
    case celery
    case shallots
    case cucumbers

    var name: String {
        return "\(self)".map {
            $0.isUppercase ? " \($0)" : "\($0)" …
Run Code Online (Sandbox Code Playgroud)

xcode uipickerview swiftui macos-catalina

14
推荐指数
1
解决办法
6736
查看次数

SwiftUI 简化许多文本字段的 .onChange 修饰符

我正在寻找一种方法来简化/重构在具有许多文本字段的 SwiftUI 视图中添加 .onChange(of:) 。如果解决方案简洁,我还会将修饰符移至更靠近适当字段的位置,而不是位于 ScrollView 的末尾。在这种情况下,所有 .onChange 修饰符都调用相同的函数。

例子:

.onChange(of: patientDetailVM.pubFirstName) { x in
    changeBackButton()
}
.onChange(of: patientDetailVM.pubLastName) { x in
    changeBackButton()
}
// ten+ more times for other fields
Run Code Online (Sandbox Code Playgroud)

我尝试“oring”字段。这不起作用:

.onChange(of:
            patientDetailVM.pubFirstName ||
            patientDetailVM.pubLastName
) { x in
    changeBackButton()
}
Run Code Online (Sandbox Code Playgroud)

这是我想调用的简单函数:

func changeBackButton() {
    withAnimation {
        showBackButton = false
        isEditing = true
    }
}
Run Code Online (Sandbox Code Playgroud)

任何指导将不胜感激。Xcode 13.2.1 iOS 15

xcode ios swiftui

14
推荐指数
2
解决办法
7224
查看次数

无法添加超过 10 个项目来查看 SwiftUI

我正在完成一个需要用户数据输入字段的应用程序。我用少量数据元素对其进行建模以简化开发。今天我尝试添加其他元素,但惊讶地发现我只能向一个视图添加 10 个视图。所以我尝试了最简单的设计(如下)。如果我在视图中添加了 11 个“事物”,它会立即在顶部项目上显示错误,无论它是什么:

“传递给不带参数的调用的参数”

我是否将外部容器称为 ScrollView、VStack、List 或 Form 都没有关系。同样的行为。Text/TextField 子单元是否在 VStack 中无关紧要。

所以我回到了基础 - 刚刚添加了十个文本视图。没问题。添加第十一个,它会爆炸。这是其中一种变体 - 但我需要做的就是添加 10 个简单的 Text 视图以使其中断。

我一定在这里遗漏了一些非常基本的东西。我检查了较新版本的 Xcode,但我有最新版本 11.2 beta 2 (11B44)。

@State private var textField1: String = "Pass to the ListCell"
@State private var textField2: String = "2"
//more of these


var body: some View {

    NavigationView {
        VStack {

            //extract the VStack and create a separate struct
            ListCell(tfString: textField1)

            VStack {
                Text("Text Field")
                TextField("Placeholder", text: $textField2)
                    .textFieldStyle(RoundedBorderTextFieldStyle())
                    .padding()
            }

            VStack { …
Run Code Online (Sandbox Code Playgroud)

xcode swiftui

13
推荐指数
2
解决办法
3727
查看次数

由于非活动配置文件,Testflight错误无法安装<appname> WWDR错误

我已经通过iTunes连接上传了一个IOS 8应用程序,安装了测试用户并邀请他们测试我的应用程序.这些用户已从App Store安装了TestFlight,并已接受条款和条件.TestFlight应用程序使用"安装"按钮显示我的应用程序.当用户单击"安装"并出现错误消息时,立即声明"由于非活动配置文件而导致Testflight错误无法安装WWDR错误"

我在搜索字符串和一串子字符串(包括Testflight上的搜索,而不是Apple,网站)上找不到任何内容

任何帮助,将不胜感激.

ios testflight

10
推荐指数
1
解决办法
1898
查看次数

无法执行简单的导航以查看和返回 SwiftUI 导航栏按钮

我正在尝试使用条形按钮项从一个视图到另一个视图并返回一个简单的 SwiftUI 导航。我尝试了三种不同的方法来调用新视图。在 body 视图中使用 Button 有效,但在导航栏中使用 NavigationBarItems 以两种不同的方式失败。

这是开始视图:

struct ContentView: View {
    @State private var showSecondView = false
    var body: some View {
        NavigationView {
            VStack {
                Text("This is the content view")
                    .navigationBarTitle("Nav Title")
//this works ONCE only:
                    .navigationBarItems(trailing: Button(action: {self.showSecondView.toggle()}) {
                        Text("SecondView")
                    })
//this always fails on return to contentview with error:
//Tried to pop to a view controller that doesn't exist
//                .navigationBarItems(trailing:
//                    NavigationLink(destination: SecondView()) {
//                        Text("SecondNav")
//                    }
//                )
//This always works: …
Run Code Online (Sandbox Code Playgroud)

xcode swiftui

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

SwiftUI .onDelete 的列表视图崩溃应用程序

我有一个使用 SwiftUI 构建的相当简单的应用程序,它本质上是一个主细节类型。数据存储在核心数据中。添加和更新记录工作正常,但从列表视图中删除项目时应用程序总是崩溃。我正在使用 .onDelete 修饰符进行删除。我没有收到任何错误消息 - 只是线程中断。记录确实被删除了,所以我猜测列表视图的重新渲染没有接收更新的数据。

我可能在做梦,但我很确定删除功能在前两个 Beta 版中有效。该应用程序仅在设备上运行。它不适用于预览或模拟器。

iOS 13.1、Xcode (11392r)、Catalina (19A546d)

这是 ContentView():

struct ContentView: View {

    @Environment(\.managedObjectContext) var managedObjectContext
    @FetchRequest(fetchRequest: ToDoItem.getAllToDoItems()) var toDoItems: FetchedResults<ToDoItem>

    @State private var newToDoItem = ""

    var body: some View {
        NavigationView {
            List {
                 Section(header: Text("Records")) {
                    ForEach(self.toDoItems) { toDoItem in
                        NavigationLink(destination: EditToDo(toDoItem: toDoItem)) {
                            ToDoItemView(title: toDoItem.title!,
                                         firstName: toDoItem.firstName!,
                                         lastName: toDoItem.lastName!,
                                         //createdAt: "\(toDoItem.createdAt!)")
                                createdAt: self.localTimeString(date: toDoItem.createdAt!)
                                        )
                        }
                    }
                    .onDelete { indexSet in
                        let deleteItem = self.toDoItems[indexSet.first!]
                        self.managedObjectContext.delete(deleteItem)

                        do {
                            try …
Run Code Online (Sandbox Code Playgroud)

xcode core-data ios swiftui macos-catalina

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

SwiftUI 无法平移图像

我无法在 SwiftUI 中找到与平移手势等效的方法。我确实看到并使用了放大、点击、拖动和旋转 - 但我没有看到任何内置的平底锅。在下面的代码片段中,我添加了一个图像并允许用户缩放 - 但我希望用户也移动缩放后的图像以专注于感兴趣的区域。拖动当然不能完成这项工作 - 它只是移动框架。

我尝试在顶部分层一个框架并移动底部图像,但也无法使其工作。

 struct ContentView: View {

    @State var scale: CGFloat = 1.0
    @State var isScaled: Bool = false
    @State private var dragOffset = CGSize.zero

    var body: some View {
        GeometryReader { geo in
            VStack {
                ZStack{
                    RoundedRectangle(cornerRadius: 40)
                        .foregroundColor(Color.white)
                        .frame(width: geo.size.width - 45, height: geo.size.width - 45)
                        .shadow(radius: 10)

                    Image("HuckALaHuckMedium")
                        .resizable()
                        .scaleEffect(self.scale)
                        .frame(width: geo.size.width - 60, height: geo.size.width - 60)
                        .cornerRadius(40)
                        .aspectRatio(contentMode: .fill)
                        .shadow(radius: 10, x: 20, y: 20)

                        //need pan not …
Run Code Online (Sandbox Code Playgroud)

gesture ios swiftui

5
推荐指数
2
解决办法
2138
查看次数

SwiftUI 以编程方式选择列表项

我有一个带有基本列表/详细信息结构的 SwiftUI 应用程序。从模态表创建一个新项目。当我创建一个新项目并保存它时,我希望选择该列表项。实际上,如果在添加之前没有选择任何项目,则在添加之后不会选择任何项目。如果在添加之前选择了一个项目,则在添加之后选择了相同的项目。

我将包含 ContentView 的代码,但这确实是 List/Detail 的最简单示例。

struct ContentView: View {

    @ObservedObject var resortStore = ResortStore()
    @State private var addNewResort = false
    @State private var coverDeletedDetail = false

    @Environment(\.presentationMode) var presentationMode

    var body: some View {

        List {
            ForEach(resortStore.resorts) { resort in
                NavigationLink(destination: ResortView(resort: resort)) {

                    HStack(spacing: 20) {
                        Image("FlatheadLake1")
                        //bunch of modifiers

                        VStack(alignment: .leading, spacing: 10) {
                        //the cell contents
                        }
                    }
                }
            }
            .onDelete { indexSet in
                self.removeItems(at: [indexSet.first!])
                self.coverDeletedDetail.toggle()
            }

            if UIDevice.current.userInterfaceIdiom == .pad {
                NavigationLink(destination: …
Run Code Online (Sandbox Code Playgroud)

xcode ios swiftui

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

SwiftUI TextEditor 滚动显示键盘不起作用

我有一个具有 SwiftUI 生命周期的 SwiftUI 应用程序,它使用 TextFields 和 TextEditors。我编写了一个修饰符来处理当键盘存在时滚动键盘下方的内容。我的修改器对于文本字段按预期工作,但对于文本编辑器根本不起作用。苹果文档称,keyboardWillShowNotification 是在键盘显示之前立即发布的。我找不到任何说明通知仅限于文本字段的内容。两种字段类型都在同一个 ScrollView 中。希望我在这里遗漏了一些简单的东西。

我的修改器:

struct AdaptsToSoftwareKeyboard: ViewModifier {

    @State var currentHeight: CGFloat = 0

    func body(content: Content) -> some View {
        content
            .padding(.bottom, self.currentHeight)
            .edgesIgnoringSafeArea(self.currentHeight == 0 ? Edge.Set() : .bottom)
            .onAppear(perform: subscribeToKeyboardEvents)
    }

    private let keyboardWillOpen = NotificationCenter.default
        .publisher(for: UIResponder.keyboardWillShowNotification)
        .map { $0.userInfo![UIResponder.keyboardFrameEndUserInfoKey] as! CGRect }
        .map { $0.height }

    private let keyboardWillHide =  NotificationCenter.default
        .publisher(for: UIResponder.keyboardWillHideNotification)
        .map { _ in CGFloat.zero }

    private func subscribeToKeyboardEvents() {
        _ = Publishers.Merge(keyboardWillOpen, keyboardWillHide) …
Run Code Online (Sandbox Code Playgroud)

xcode ios swiftui

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