小编Han*_*ash的帖子

为什么我的 SwiftUI 文本字段一次只允许更改一个字符?

我正在尝试在我的应用程序中创建特定生日/日期的视图,并且我使用了文本字段,以便用户可以更改现有的想法。但是文本字段一次只能更改一个字符?然后它会阻止用户输入(然后他们可以再次单击文本字段并更改另一个字符)。理想情况下,他们应该能够继续打字,直到他们点击停止。

这应该是所有相关的代码,因为我认为其他任何事情都不会影响它:

@State private var exampleIdeas = ["Sweets", "Chocolate", "Cake"]

ForEach($exampleIdeas, id:\.self, editActions: .delete) { $idea in
                    TextField("Idea", text: $idea)
                }
Run Code Online (Sandbox Code Playgroud)

我尝试过寻找以前的解决方案,但似乎没有其他人遇到这个问题?(我自己不知道任何可能的原因/解决方案)

ios swift swiftui

3
推荐指数
1
解决办法
582
查看次数

如何将 Picker 放入 SwiftUI 中的上下文菜单弹出窗口

我需要一个按钮来打开一个本机上下文菜单弹出窗口,其中有两列和一个轮式选择器。与 Apple 在 DatePicker 中的做法类似。

在此输入图像描述

我尝试将 Picker 放入菜单或 .contextMenu 中,但它不起作用

Menu {
    Picker(selection: $selection, label: Text(label)) {
        ...
    }
    .pickerStyle(WheelPickerStyle())
}

Text("Open menu")
    .contextMenu {
        Picker(selection: $selectedValue2, label: Text("")) {
            VStack {
                Picker("", selection: $selectedValue.0) {
                    ...
                }
                .pickerStyle(WheelPickerStyle())
            }
            VStack {
                Picker("", selection: $selectedValue.1) {
                    ...
                }
                .pickerStyle(WheelPickerStyle())
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

3
推荐指数
1
解决办法
1099
查看次数

具有默认值的枚举属性上的 SwiftData 编译器错误

注意: - 这个问题最初是在 Xcode 15 处于测试阶段时发布的。在 Xcode 15 的最终版本中,编译器给出了更清晰的错误说明:

默认值需要完全限定的域名值


原问题:

我已将这个问题缩小到一个简单的模型类,其中一个属性具有枚举类型。如果我尝试为该属性指定默认值,则代码将无法再编译:

enum SomeEnum: Hashable, Codable {
    case one
    case two
}

@Model
class SomeClass {
    var value: SomeEnum = .two

    init() {
    }
}
Run Code Online (Sandbox Code Playgroud)

这会导致错误:

输入“有吗?” 没有成员“二”

如果您深入研究实际日志,您可以看到更多信息:

@__swiftmacro_8Sample39SomeClass5ModelfMm_.swift:15:34:错误:输入“有吗?” 没有成员“二”
    (“值”,\SomeClass.value,.two,nil)
                                ~^~
/.../Sample.swift:117:1: 注意:在宏“模型”的扩展中
类 SomeClass {
^~~~~~~~~~~~~~~~~
/.../Sample.swift:117:1: 注意:在宏“模型”的扩展中
类 SomeClass {
^~~~~~~~~~~~~~~~~

如果右键单击@Model并选择“展开宏”,您会看到:

@__swiftmacro_8Sample39SomeClass5ModelfMm_.swift:15:34: error: type 'Any?' has no member 'two'
    ("value", \SomeClass.value, .two, nil)
                                ~^~~
/.../Sample.swift:117:1: note: in expansion of macro 'Model' here
class …

enums swift swift-data

3
推荐指数
1
解决办法
973
查看次数

SwiftData:类型“Schema.Relationship.Option”没有成员“cascade”

我们有一个 Swiftdata 模型,例如:

@Model
class MyThing {

   var name:String

   var myObject: MyCustomObject

   //...

}
Run Code Online (Sandbox Code Playgroud)

为了让“myObject”(也是一个 @Model)在删除 MyThing 实例时自动删除,我们需要向 myObject 添加属性(?)、关系(.cascade)。

本教程中显示了这一点:

在此输入图像描述

...还有这个苹果视频:

在此输入图像描述

但是当我尝试这样做时,就会发生这种情况(似乎没有选项可以做到这一点)...如果我手动输入它,它会说找不到:

在此输入图像描述

swift swift-data swift-data-relationship

3
推荐指数
1
解决办法
280
查看次数

SF Symbol imageView 不符合 pointSize?

我的故事板中有一个空的 UIImageView,并且在我的 ViewController.swift 文件中有插座。在 viewDidLoad 中,我调用以下代码:

let config = UIImage.SymbolConfiguration(pointSize: 50, weight: .light)
self.symbol.image = UIImage(systemName: "calendar")
self.symbol.preferredSymbolConfiguration = config
Run Code Online (Sandbox Code Playgroud)

符号加载良好,甚至重量也能正确反映。

然而,符号图像的大小仍然与故事板中 UIImageView 的大小相关,即使我没有在 UIImageView 上设置任何约束。据我所知,SymbolConfiguration 中声明的 pointSize 对符号图像的大小没有影响。

据我所知,似乎有两种方法可以让 SF Symbols 中的 pointSize 发挥作用:1. 以编程方式执行所有操作,或 2. 在 Storyboard/Inspector 中执行所有操作。

有谁知道我做错了什么或者SF Symbols不支持故事板+代码配置?

ios swift sf-symbols

2
推荐指数
1
解决办法
1610
查看次数

iOS 中的应用内评分功能及其限制

Apple 将评论提示(评价此应用程序)限制为每年 3 次,并且可以在用户设置中将其关闭。

\n\n

我想问与此相关的三件事:

\n\n
    \n
  1. 应用内评分弹出窗口是否可以显示超过 3 次?
  2. \n
  3. 当用户点击提示\xe2\x80\x99s提交按钮时会发生什么?它会关闭弹出窗口吗?它会重定向到 App Store 吗?
  4. \n
  5. 有没有办法检测用户何时从设备设置中禁用了评级提示?
  6. \n
\n

ios skstorereviewcontroller

2
推荐指数
1
解决办法
1万
查看次数

菜单项或选择器中的多行

我已经开始使用 SwiftUI 并尝试将使用 Jetpack Compose 创建的应用程序转换为 iOS,但我遇到了菜单(或选择器,如果更容易的话)的问题。

我想要做的是能够创建具有多行且两行字体大小不同的项目。但我无法让它工作,只有第一行可见

我尝试过类似的事情:

Picker("Select menu item", selection: $selectedItem) {
   ForEach(0..<items.count) {
        VStack  {
            Text("Menu item 1").fontWeight(.bold) // Only this text is shown
            Text("Description")
        }
   }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过

Menu("Options") {
     VStack  {
        Text("Menu item 1").fontWeight(.bold) // Only this text is shown
        Text("Description")
     }
}
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样: 在此输入图像描述

我花了很多时间试图找到这样的例子。这可以在 SwiftUI 中做到吗?如果没有,您应该建议使用什么控件?

swiftui

2
推荐指数
1
解决办法
1499
查看次数

使用苹果图表时如何创建没有图例的图表?

Apple 的 Swift Charts 最近在 WWDC 上推出。然而,我的练习图有冗余。不需要图例。如何创建具有所有颜色但没有图例的图表?

\n

在此输入图像描述

\n

使用 \xe2\x80\x9c.foregroundStyle(by: .value("Shape", shape.type))\xe2\x80\x9d 会导致图表自动向条形图添加多种颜色。但foregroundStyle也带有传奇色彩。删除 foregroundStyle 会同时删除图例和颜色:

\n

在此输入图像描述

\n

这是最小的可重现代码:

\n
import Charts\nimport SwiftUI\n\nstruct ContentView: View {\n    var body: some View {\n        VStack {\n            Text("Swift Chart Example")\n            BarChart()\n                .frame(width: 350, height: 350, alignment: .center)\n        }\n    }\n}\n\nstruct Shape: Identifiable {\n    var type: String\n    var count: Double\n    var id = UUID()\n}\n\nlet data: [Shape] = [\n    .init(type: "Square",    count: 12),\n    .init(type: "Heart",     count: 10),\n    .init(type: "Rectangle", count: 21),\n    .init(type: "Star",      count: 15),\n    .init(type: "Circle", …
Run Code Online (Sandbox Code Playgroud)

swiftui swiftui-charts

2
推荐指数
1
解决办法
2177
查看次数

在 SwiftUI 中使用 ImagePicker

我是 SwiftUI 新手。我想制作一个具有图像选择器的应用程序。

\n

我找到这篇文章: https: //ishtiz.com/swiftui/image-picker-in-swiftui

\n

它说:

\n
\n

要在 SwiftUI 中实现图像选择器,您可以使用ImagePickerSwiftUI 框架提供的结构体。该结构有一个pickImage()方法,可以向用户呈现图像选择器,并将所选图像作为 UIImage 对象返回。

\n
\n

提供此示例代码:

\n
struct ContentView: View {\n  @State private var image: UIImage?\n  var body: some View {\n    VStack {\n      if image != nil {\n        Image(uiImage: image!)\n          .resizable()\n          .scaledToFit()\n      }\n      Button("Select Image") {\n        self.image = ImagePicker.pickImage()\n      }\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我将代码添加到我的项目中,但它没有\xe2\x80\x99t 构建:

\n
\n

在范围内找不到“ImagePicker”

\n
\n

我需要进口一些东西吗?

\n

ios swift swiftui

2
推荐指数
1
解决办法
4313
查看次数

从 actor 的 init 方法中调用方法

我正在尝试将 Swift 中的一个类转换为actor. 我的类的当前init方法调用另一个实例方法来完成一系列初始化工作。转换后,这是我的演员的简化版本:

actor MyClass {
    private let name: String

    init(name: String) {
        self.name = name

        self.initialize()  // Error on this line
    }

    private func initialize() {
        // Do some work
    }

    func login() {
        self.initialize()
        // Do some work
    }

    // Bunch of other methods
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时出现以下错误:

无法从非隔离上下文引用 Actor 隔离的实例方法“initialize()”;这是 Swift 6 中的一个错误

我发现我可以替换self.initialize()为:

Task { await self.initialize() }
Run Code Online (Sandbox Code Playgroud)

这是最好的方法吗?这是否会导致任何竞争条件,外部调用者可以在该initialize()方法有机会运行之前在我的参与者上执行该方法?看起来很麻烦,因为您不在参与者的 init 方法中的孤立上下文中。我找不到任何解释这一点的 Swift 文档。

concurrency actor swift

2
推荐指数
1
解决办法
923
查看次数