如何在可以选择的 swiftUI 中显示文本?例如在 macOS 上的终端应用程序中?
Text("This is some text") 显示文本但不可选。
我是 Mac 上 GUI 开发的新手。我应该使用其他视图吗?
我在 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 中这对我来说是不可能的。
提前致谢
我正在 SwiftUI 中开发 macOS 应用程序。我.contextMenu在我的列表中使用修饰符。一切正常,但是我正在尝试制作子菜单。
通常我只是使用按钮,我不是要创建层次结构/或子菜单。它是可能的,并在许多 Apple 默认应用程序中使用。我只是不确定如何创建该菜单。这是我目前使用的代码
.contextMenu {
Button(action: {
})
{
Text("Button")
}
}
Run Code Online (Sandbox Code Playgroud)
这是默认日历应用程序的图片,带有子菜单。
我正在尝试向我的 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 应用程序中使用 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) 我在我的 SwiftUI Mac OSX 应用程序中使用导航视图。我有一个列表视图来选择人员,然后在 PersonDetail 中显示他们的属性。它工作正常。但是,我将一个状态发送到PersonDetail View.
这工作正常,但是每次单击新行时,我都想再次将状态重置s_selectedView为0。
是否有 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事件而改变。我怎样才能赶上那个事件?
我在我的 SwiftUI Mac OS 应用程序中使用了许多 TextField。我是主窗体,用户在其中添加数据,数据由多个Stacks/组成,views其中包含TextFields/和Text()
我注意到一个奇怪的错误,当我在不同视图中组合使用许多 TextField 时,在选择 TextField 时会出现一些非常严重的滞后。此外,当我跳到下一个时Tab也需要时间。
这真的是很奇怪的行为,我不确定是什么原因造成的。我对很多人TextFields也有不同的看法,一切都在顺利进行。
有时我也不能跳回之前的TextField用Shift+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) 是否可以使用拖放功能对 LazyVGrid 内的项目重新排序?
当将 List 与 .onMove() 一起使用时,类似于编辑模式吗?
谢谢!
我正在使用 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) 我知道@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)