AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-316469

Duck's questions

Martin Hope
Duck
Asked: 2024-08-03 20:52:37 +0800 CST

无论如何,弹出窗口都不会显示

  • 6

我有这个代码:

import SwiftUI

struct ContentView: View {
  @State var show = false
  
  var tools = [Tool("document.on.document"), Tool("document.on.clipboard")]
  
  var body: some View {
    HStack{
      HStack {
        ForEach(tools,  id:\.id) { tool in
          Button(action: {
            print("toggle")
            show.toggle()
          }, label: {
            Image(systemName:tool.name)
              .imageScale(.large)
              .foregroundStyle(.black.gradient)
              .font(.system(size: 30))
          })
          .contentShape(Rectangle())
          .popover(isPresented: $show, arrowEdge: .top) {
            Color.red
              .frame(width:400, height:400)
              .onAppear{
                print("popover show")
              }
          }
        }

        
      }

      .padding()
    }
    .background(
      RoundedRectangle(cornerSize: CGSize(width: 50,height: 50))
        .fill(.red.opacity(0.5).gradient))
    
    .padding()
    
    
  }
}

#Preview {
  ContentView()
}

struct Tool: Identifiable, Equatable {
  let id = UUID()
  let name:String
  
  init(_ name: String) {
    self.name = name
  }
}

弹出窗口没有显示。我做了所有事情。

这是为什么?

swiftui
  • 1 个回答
  • 27 Views
Martin Hope
Duck
Asked: 2024-07-23 15:03:29 +0800 CST

如何将 environmentObject 传递给 UIViewRepresentable 的 Coordinator?

  • 6

我想将环境对象传递给UIViewRepresentable这样的:

DrawingUI()
  .environmentObject(toolbarModel)

它toolbarModel有一个名为的属性selectedUIColor,我需要UIViewRepresentable更新它。

然后我有这个:

struct DrawingUI: UIViewRepresentable {
  @EnvironmentObject private var toolbarModel:ToolbarModel

...

let coordinator = Coordinator(!!!!!)

class Coordinator: NSObject, PKToolPickerObserver {
// for some reason I have to have this property
// again because I did not find a way to set the
// same property outside the coordinator
private var toolbarModel:ToolbarModel

private var selectedUIColor:UIColor {
  didSet {
    toolbarModel.selectedUIColor = selectedUIColor
  }
}

init(_ toolbarModel:ToolbarModel) {
  self.toolbarModel = toolbarModel
}

...

func makeCoordinator() -> PencilKitSwiftUI.Coordinator {
  return Coordinator(!!!!!)
}

我的问题是:我应该在零件上放什么!!!!!?

swiftui
  • 2 个回答
  • 33 Views
Martin Hope
Duck
Asked: 2024-07-01 19:18:23 +0800 CST

如何使菜单从圆形变为椭圆形?

  • 5

考虑以下代码:

import SwiftUI

struct ContentView: View {
  @State private var hidden = true
    var body: some View {
        HStack {
          Group{
            if !hidden {
              Image(systemName: "globe")
                .imageScale(.large)
                .foregroundStyle(Color.black)
                .font(.system(size: 50))
                .opacity(hidden ? 0 : 1)
                .animation(.easeInOut(duration: 0.5).delay(1), value: hidden)
            }
            Image(systemName: "globe")
              .imageScale(.large)
              .foregroundStyle(Color.white)
              .font(.system(size: 50))
            
            if !hidden {
              Image(systemName: "globe")
                .imageScale(.large)
                .foregroundStyle(Color.yellow)
                .font(.system(size: 50))
                .opacity(hidden ? 0 : 1)
                .animation(.easeInOut(duration: 0.5).delay(3), value: hidden)    
            }
          }
          .padding(.horizontal, 10)
          .padding(.vertical, 5)              
        }
        .onTapGesture {
          withAnimation{
            hidden.toggle()
          }
        }
        .background(
          RoundedRectangle(cornerSize: CGSize(width: 50,height: 50))
            .fill(.red)
        )
        .padding()
    }
}

#Preview {
    ContentView()
}

这段代码最初显示一个白色地球仪和一个白色圆圈,就像这样。

在此处输入图片描述

当您点击圆圈时,菜单会扩展为一个椭圆形,上面还有另外两个地球仪。

在此处输入图片描述

黑色和黄色的球体在椭圆扩大的同时逐渐淡出,但这不是我想要的。

我希望所有球体都堆放在同一个中心位置。此时,只有中心球体可见,其他两个不可见。当点击红色圆圈并开始扩大时,我希望球体 1 向左移动,球体 3 向右移动,因为它们在追逐正在扩大的新边界。在它们移动的同时,它们的透明度也变为 1。

如果点击现在的椭圆,我希望发生相反的情况。

我怎么做?

animation
  • 1 个回答
  • 20 Views
Martin Hope
Duck
Asked: 2024-04-07 18:44:19 +0800 CST

如何防止Xcode为未指定的目标编译包?

  • 5

我正在构建一个包,其中包含自 2008 年开始开发 iOS 以来我一直在构建的许多类、扩展和模块。

由于我还针对 macOS、watchOS、iPadOS 和 tvOS 进行开发,因此该软件包包含适用于每种风格或 Apple 设备的代码。

特别是在这个包中,我有适用于 iOS 和 tvOS 的东西。

该包声明如下:

import PackageDescription

let package = Package(
  name: "MyPackage",
  platforms: [.iOS(.v16), .tvOS(.v13)],
  products: [
    // Products define the executables and libraries a package produces, making them visible to other packages.
    .library(
      name: "MyPackage",
      targets: ["MyPackage"]),
  ],
  targets: [
    .target(name: "MyPackage"),
    .testTarget(name: "MyPackageTests", dependencies: ["MyPackage"])
  ]
)

我已将此包导入到一个具有两个目标的项目中,一个用于 iOS,另一个用于 watchOS,因为我想在 iOS 目标中使用它包含的用于 iOS 的内容。

我现在正在调试 iOS 目标。即便如此,Xcode 也会给出很多错误,因为它正在尝试针对 watchOS 目标编译包。

这迫使我在每个文件中添加#if !os("watchOS)包#endif必须隔离代码并防止 Xcode 为 watchOS 目标编译它。这是非常愚蠢的,因为包是这样声明的:

platforms: [.iOS(.v16), .tvOS(.v13)],

因为该包刚刚为 iOS 目标添加。

有没有办法让 Xcode 按预期工作,而不是为未声明的目标编译包?

swift
  • 1 个回答
  • 25 Views
Martin Hope
Duck
Asked: 2024-03-23 00:36:21 +0800 CST

如何从字符串中删除智能引号?

  • 5

我有一个像这样的字符串:

let muString = "\n\nFebruary 11, 2012\n\nThis natural-color image showing Acme Inc\'s logo... bla bla bla “Mount Everest”... bla bla 'Black Viper' ... bla bla. \"Naja\""

换句话说,我有智能引号

````````````

(注意:SO 没有正确渲染前面的字符。我的意思是它们正在打开和关闭卷曲单引号和双引号)。

还有双引号,我想用一个纯 ASCII 引号替换所有内容。

我创建了这个扩展:

extension String {
  func plainText() -> String {
    var newString = self.replacingOccurrences(of: "\u{0060}", with: "'")
    newString = self.replacingOccurrences(of: "\u{00b4}", with: "'")
    newString = self.replacingOccurrences(of: "\u{2018}", with: "'")
    newString = self.replacingOccurrences(of: "\u{2019}", with: "'")
    newString = self.replacingOccurrences(of: "\u{201c}", with: "'")
    newString = self.replacingOccurrences(of: "\u{201d}", with: "'")
    newString = self.replacingOccurrences(of: "\"", with: "'")
    return newString
  }
}

但做

print (myString.plainText())

给了我和独自一人一样的感觉myString。

换句话说,扩展程序不会清除任何内容。

有任何想法吗?

swift
  • 1 个回答
  • 25 Views
Martin Hope
Duck
Asked: 2024-01-10 02:46:03 +0800 CST

如何创建按钮样式并在不使用 .buttonStyle 的情况下调用它?

  • 5

我创建了一个按钮样式来自定义按钮。像这样的东西:

struct BlueButtonStyle: ButtonStyle {
    func makeBody(configuration: Configuration) -> some View {
        configuration.label
            .padding()
            .background(Color(red: 0, green: 0, blue: 0.5))
            .foregroundStyle(.white)
            .clipShape(Capsule())
    }
}

要使用它,我必须像这样调用它并且它工作正常。

.buttonStyle(BlueButtonStyle(... my parameters))

注意:在我的例子中,我将参数传递给它。

但相反,我想这样称呼它

.blueButtonStyle(... my parameters)

如果那是常规视图修改器,我会这样做:

extension View {
  func blueButtonStyle(... my parameters) -> some View {
    self.modifier(BlueButtonStyle(... my parameters)
}

这编译得很好,但是当我尝试使用

.blueButtonStyle(... my parameters)

我明白了

Value of type 'Button<some View>' has no member 'blueButtonStyle'

怎么了?

button
  • 1 个回答
  • 31 Views
Martin Hope
Duck
Asked: 2024-01-09 01:35:46 +0800 CST

访问未安装在视图上的 StateObject 对象

  • 5

关于这个问题还有其他答案,但没有一个答案可以解决这个问题,因为在我的例子中,我使用的是NSViewRepresentable可可视图,这不完全是一个 SwiftUI 视图。

我有这个代码:

struct MyObject: Hashable, Identifiable {
  let id: UUID = UUID()
  var name, brand: String
  init(name: String = "", brand: String = "") {
    self.name = varName
    self.brand = brand
  }
}

final class Model:ObservableObject {
  @Published var objects = (0..<3).compactMap {_ in
    return MyObject()
  }
}

struct ContentView: View {
  
  private let columns = [GridItem(.flexible()), GridItem(.flexible())]
  @StateObject private var model = Model()
    
  var body: some View {
    VStack{
      LazyVGrid(
        columns: columns,
        alignment: .center,
        spacing: 10,
        pinnedViews: []
      ) {
        ForEach($model.objects, id:\.id) {$object in
          MyTextField($initObject)
        }
      }
      
    }
    .padding(20)
  }
}

struct MyTextField: View {
  @Binding private var initObject:InitObject
  
  init(_ initObject:Binding<InitObject>) {
    _initObject = initObject
  }
  
  var body: some View {
    AppKitTextField(property: $initObject.name,
                    placeholder: "name",
                    fontName:"Avenir-Medium",
                    fontSize:18) { text in
    }
    
    MyAppKitTextField(property: $initObject.type,
                    placeholder: "type",
                    fontName:"Avenir-Medium",
                    fontSize:18)
      
    }
  }

问题是MyAppKitTextField a AppKit NSTextField NSViewRepresentable,如下所示:

public struct AppKitTextField: NSViewRepresentable {
  public typealias NSViewType = NSTextField
  @Binding var property: String

  public init(property: Binding<String>) {
    self._property = property
  }
    
  public class Coordinator: NSObject, NSTextFieldDelegate {
    @Binding private var text: String
    
    init(text: Binding<String>) {
      self._text = text
    }
  }

    public func makeNSView(context: NSViewRepresentableContext<AppKitTextField>) -> NSTextField {
        let textField = NSTextField()
        textField.delegate = context.coordinator
        textField.stringValue = property
        return textField
      }
      
      public func makeCoordinator() -> AppKitTextField.Coordinator {
        return Coordinator(text: $property)
      }
      
      public func updateNSView(_ nsView: NSTextField, context: Context) {
        nsView.stringValue = property
      }
    }
}

我的问题是线路

@Binding var property: String

当我尝试使用此视图时,我看到此错误:

Accessing StateObject's object without being installed on a View. This will create a new instance each time.
cocoa
  • 1 个回答
  • 41 Views
Martin Hope
Duck
Asked: 2023-10-06 23:50:45 +0800 CST

当您有多个级别时,是否有一种现代方法可以在 SwiftUI 中执行类似通知之类的操作?

  • 5

回到过去,当您需要控制视图层次结构深处的某些内容时,您可以简单地使用

NotificationCenter.default.addObserver

然后向您的对象发布通知,它们就会发生变化。

现在使用 SwiftUI,如果您只有一层视图,您可以简单地将@State变量传递到下一个视图,然后将对其进行绑定。

但想象一个深度为 4 个视图的视图。

View A > View B > View C > View D

我认为将变量传递 4 层深度并不优雅@State,因此View D可以更改它。

另一种丑陋的方法是创建一个@Observable带有变量的单例@Published。

这样做的常见做法是什么?

swiftui
  • 1 个回答
  • 33 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve