小编dav*_*dev的帖子

macOS 上的 SwiftUI 可选文本

如何在可以选择的 swiftUI 中显示文本?例如在 macOS 上的终端应用程序中?

Text("This is some text") 显示文本但不可选。

我是 Mac 上 GUI 开发的新手。我应该使用其他视图吗?

macos swiftui

9
推荐指数
1
解决办法
918
查看次数

List Mac OS 的 SwiftUI 背景色

我在 Mac OS 中使用 ListView。我正在尝试更改该 ListView 的背景颜色。然而,这并不像预期的那么容易。

我尝试.background(Color(.red))在 ListView 上使用属性。那没有改变任何东西。

我只能找到.listRowBackground(Color(.red))哪个对表格行有影响。但是,其他背景没有受到影响。

我准备了一个小demo来演示:

在我看来身体:

  VStack
    {
        List()
        {
            Text("Test")
                .listRowBackground(Color.green)

            Text("Test")
                .listRowBackground(Color.green)

            Text("Test")
                .listRowBackground(Color.green)

        }.background(Color(.red))

    }.background(Color(.red))
Run Code Online (Sandbox Code Playgroud)

这就是我得到的结果:

在此处输入图片说明

主背景没有变化。我读到了一个解决方案,UITableView.appearance但在 Mac OS 的 SwiftUI 中这对我来说是不可能的。

提前致谢

macos swift swiftui

8
推荐指数
1
解决办法
3315
查看次数

带有子菜单的 SwiftUI ContextMenu

我正在 SwiftUI 中开发 macOS 应用程序。我.contextMenu在我的列表中使用修饰符。一切正常,但是我正在尝试制作子菜单。

通常我只是使用按钮,我不是要创建层次结构/或子菜单。它是可能的,并在许多 Apple 默认应用程序中使用。我只是不确定如何创建该菜单。这是我目前使用的代码

.contextMenu {
    Button(action: {
    })
    {
        Text("Button")
    }
}
   
Run Code Online (Sandbox Code Playgroud)

这是默认日历应用程序的图片,带有子菜单。

macos swiftui

8
推荐指数
1
解决办法
739
查看次数

SwiftUI 拖放文件

我正在尝试向我的 SwiftUI Mac 应用程序添加“拖放”手势/功能。

我想将文件从我的系统/桌面拖放到我的应用程序中。我发现它在常规 Swift 中是可能的。我现在正在尝试在 SwiftUI 中执行此操作。

onDrop()在 SwiftUI for Views 中找到了一个函数。但是,看起来这仅适用于我的应用程序中的内部手势。我想从外部拖动文件。

在 Swift 中,您需要为拖动的类型注册您的 NSView。

registerForDraggedTypes([kUTTypeFileURL,kUTTypeImage])
Run Code Online (Sandbox Code Playgroud)

我想创建一个 NSViewRepresentable 并将其包装到我的 SwiftUI 视图中。

这是我想出的代码,但是我无法调用registerForDraggedTyped.

final class DragDropView: NSViewRepresentable {

    func makeNSView(context: NSViewRepresentableContext<DragDropView>) -> NSView {
        let view = NSView()

        view.registerForDraggedTypes([NSPasteboard.PasteboardType.pdf, NSPasteboard.PasteboardType.png])

        return view
    }

    func updateNSView(_ nsView: NSView, context: NSViewRepresentableContext<DragDropView>) {

    }
Run Code Online (Sandbox Code Playgroud)

在 SwiftUI 中是否有更简单的解决方案?我很想使用 onDrop() 函数,但这不适用于外部文件,是吗?

macos swift swiftui

7
推荐指数
2
解决办法
5233
查看次数

SwiftUI CoreData 异步获取

我在 macOS 应用程序中使用 CoreData 和 SwiftUI。我主要利用@FetchRequestSwiftUI 中的 来向数据库发出请求。

我注意到当数据库中有多个对象时,FetchRequest 需要更多时间。此外,我正在使用该数据中的图像构建一个列表。当我想显示带有 FetchRequest 的视图时,该视图需要几秒钟的时间才能加载。

我认为这是由于 FetchRequest 是在主线程上执行的。我正在寻找一种以异步方式向 CoreData 发出 Fetch 请求的方法,以便直接显示 UI。

但是,当数据库中有新记录时,我仍然想利用 FetchRequest 并自动更新 UI。

我虽然使用ObservableObjects并发布我的结果为 via @Published,这将异步工作,但是我必须手动拉取更新。

这就是我通过 @FetchRequest 发出请求的方式

struct ViewA: View {

    @FetchRequest(entity: Venue.entity(), sortDescriptors:[NSSortDescriptor(key:"name", ascending: true, selector: #selector(NSString.localizedStandardCompare(_:)))]) var venueItems: FetchedResults<Venue>
Run Code Online (Sandbox Code Playgroud)

当我在类似情况下显示 ViewA 时,加载视图需要几秒钟的时间。

struct ViewWrapper: View {
    @State var currentView = 0

    var body: some View 
    {
        if(currentView == 0) { 
            Text("Dummy View")
        } else {
            ViewA() //<< when this view …
Run Code Online (Sandbox Code Playgroud)

macos core-data swiftui

7
推荐指数
0
解决办法
294
查看次数

SwiftUI 更新导航操作状态

我在我的 SwiftUI Mac OSX 应用程序中使用导航视图。我有一个列表视图来选择人员,然后在 PersonDetail 中显示他们的属性。它工作正常。但是,我将一个状态发送到PersonDetail View.

这工作正常,但是每次单击新行时,我都想再次将状态重置s_selectedView0

是否有 NavigationView 更新事件?我尝试onAppear()在我的 PersonDetail 视图中使用一个事件,但是它只被调用一次。我看到的唯一选择是将我的状态推向我的状态List,然后tapGesture在表视图上更改它。

那是我的导航视图代码:

  NavigationView {
    PersonList(selectedPerson: $selectedPerson)

    if selectedPerson != nil {
        PersonDetail(person: selectedPerson!, s_currentView: self.$s_selectedView)
        //Here I would need a event, for appear / update
        //.onAppear
        //{
            //only called once 
        //}

    }
  }
Run Code Online (Sandbox Code Playgroud)

这是我在上述相同视图中的绑定:

@State var s_selectedView : Int = 0
Run Code Online (Sandbox Code Playgroud)

每当在列表中按下新项目时,我都想将该变量重置为 0。

翻译:博士

是否有类似onAppear仅用于update状态的等效函数?问题是我的视图没有再次出现(onAppear没有被调用),只是数据因@State事件而改变。我怎样才能赶上那个事件?

macos xcode list swift swiftui

5
推荐指数
0
解决办法
496
查看次数

SwiftUI 多个 TextField 导致滞后

我在我的 SwiftUI Mac OS 应用程序中使用了许多 TextField。我是主窗体,用户在其中添加数据,数据由多个Stacks/组成,views其中包含TextFields/和Text()

我注意到一个奇怪的错误,当我在不同视图中组合使用许多 TextField 时,在选择 TextField 时会出现一些非常严重的滞后。此外,当我跳到下一个时Tab也需要时间。

这真的是很奇怪的行为,我不确定是什么原因造成的。我对很多人TextFields也有不同的看法,一切都在顺利进行。

有时我也不能跳回之前的TextFieldShift+Tab

编辑:我可以弄清楚如何摆脱它。但是,仅当我删除一个视图时。我不想。

我的主容器看起来像这样:

    HStack
    {
       //Left Side
       VStack{
           Text("Here is the next #1")
       }
       VStack
       {
           //The View posted below
           ViewBelow()
       }
    }
Run Code Online (Sandbox Code Playgroud)

如果我删除第一个 VStack,问题就解决了。没有什么滞后。如果我添加它,它会再次出现。

只是为了给你一个我的代码的领口(许多带有 TextFields 的堆栈)

 ZStack
 {
    VStack
    {
        HStack
        {
            Text("Personal Data")
                .font(.title)
                .fontWeight(.bold)
                .padding(.horizontal, 0)
                .padding(.vertical, 5)
            Spacer()
        }

        Divider()
            .padding(.bottom, 5)

        //Personal Data Types
        HStack(spacing: 0) …
Run Code Online (Sandbox Code Playgroud)

macos swift swiftui

5
推荐指数
0
解决办法
736
查看次数

SwiftUI | 使用 LazyVGrid 进行拖放?

是否可以使用拖放功能对 LazyVGrid 内的项目重新排序?

当将 List 与 .onMove() 一起使用时,类似于编辑模式吗?

谢谢!

ios swift swiftui xcode12

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

SwiftUI CloudKit 在保持活动状态时不刷新视图

我正在使用 SwiftUI 开发 macOS 和 iOS 应用程序。两者都使用 CoreData 和 iCloudKit 在两个平台之间同步数据。它确实与同一个 iCloud 容器配合得很好。

我遇到一个问题,即停留在应用程序中时不会触发 iCloud 后台更新。如果我在两个系统上进行更改,则会推送更改,但在其他设备上不可见。

我需要重新加载应用程序、关闭应用程序并再次打开,或者在 Mac 应用程序中失去焦点并返回到它。然后我的List就会刷新。我不知道为什么它不起作用,同时留在应用程序内而不失去焦点。

我在 Stackoverflow 上读到了几个线程,但是它们对我不起作用。这是我在 iOS 中的简单视图

struct ContentView: View {
    
    @Environment(\.managedObjectContext) var managedObjectContext
    
    @State private var refreshing = false
    private var didSave =  NotificationCenter.default.publisher(for: .NSManagedObjectContextDidSave)

    @FetchRequest(entity: Person.entity(), sortDescriptors: []) var persons : FetchedResults<Person>
    
    var body: some View {
        NavigationView
        {
            List()
            {
                ForEach(self.persons, id:\.self) { person in
                    Text(person.firstName + (self.refreshing ? "" : ""))
                    // here is the listener for …
Run Code Online (Sandbox Code Playgroud)

core-data ios icloud swift swiftui

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

如何在带有@Published的模型中使用@AppStorage并存储应用程序内购买的产品

我知道@AppStorage只能在视图内使用,但我更喜欢管理模型并利用@AppStorage.

例如,如果我想将购买的产品存储在 中In App Purchasing,我可以使用此解决方法还是最好避免这种情况?

typealias PurchasedProductIdentifiers = Set<String>

extension PurchasedProductIdentifiers: RawRepresentable {
    public init?(rawValue: String) {
        guard let data = rawValue.data(using: .utf8),
            let result = try? JSONDecoder().decode(PurchasedProductIdentifiers.self, from: data)
        else {
            return nil
        }
        self = result
    }
    public var rawValue: String {
        guard let data = try? JSONEncoder().encode(self),
            let result = String(data: data, encoding: .utf8)
        else {
            return "[]"
        }
        return result
    }
}

class MyModel: NSObject, ObservableObject {
    
    @Published var purchasedPub: …
Run Code Online (Sandbox Code Playgroud)

iphone in-app-purchase swift swiftui appstorage

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

标签 统计

swiftui ×10

macos ×7

swift ×7

core-data ×2

ios ×2

appstorage ×1

icloud ×1

in-app-purchase ×1

iphone ×1

list ×1

xcode ×1

xcode12 ×1