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-205185

Duncan C's questions

Martin Hope
Duncan C
Asked: 2024-12-06 02:50:09 +0800 CST

如何有条件地应用无障碍操作?

  • 5

SwiftUI 具有方便的.accessiblityAction()ViewModider,它可以将辅助功能操作添加到您正在创建的视图中。键盘用户和 VO 用户可以了解附加到视图的操作并触发它们。

我希望能够根据布尔值有条件地应用操作。如下所示:


Button {
    print("Button tapped")
} label: {
    Text("Button title")
}
if addActionToButton.wrappedValue {
    .accessibilityAction(named: "Button action") {
        print("Button action triggered")
    }
}

但是您不能将 ViewModifier 放在语句accessibilityAction内部if。

.accessibilityLabel有一个接受isEnabled参数的变体。当 isEnabled 条件为 false 时,它​​不应用可访问性标签:

@State addA11Label: Bool

Button {
    print("Button tapped")
} label: {
    Text("Button title")
}
.accessibilityLabel("Button foo. Double-tap to do stuff.", isEnabled: addA11Label.wrappedValue)

我想要一个accessibilityAction isEnabled参数,但没有那么幸运。

我如何有条件地将添加accessibilityAction到我的Button(或其他视图)中?

swiftui
  • 1 个回答
  • 45 Views
Martin Hope
Duncan C
Asked: 2024-03-06 23:02:09 +0800 CST

您应该如何创建一个使用快速参数解析器的命令行工具?

  • 5

我尝试了两种不同的方法,每种方法都以不同的方式失败:

方法#1:

  • 为项目创建文件夹。

在终端中:

  • cd 到文件夹
  • swift package init --type 可执行文件
  • 固定 Package.swift

xed 命令打开 Package.swift 文件,就像它是 Xcode 项目一样。

然后,我尝试使用 Xcode 的 File>add package dependency 将 swift-agrument-parser 添加到项目中。

问题: “复制依赖项”按钮不起作用。

方法#2:

  • 在 Xcode 中,选择“文件”>“新项目”,Mac OS 命令行工具。
  • 选择“文件”>“添加包依赖项”。

问题:

它找不到未加载的 ArugmentParser 库:@rpath/ArgumentParser.framework/Versions/A/ArgumentParser

我尝试将 main.swift 替换为名为 .swift 的文件,该文件包含一个@main目录和一个 ParsableCommand 结构。我尝试清理构建文件夹。


我能够让它工作的唯一方法是使用方法#1、swift package init 创建包,然后编辑 package.swift 文件并手动添加 swift-argument-parser 依赖项。我不太使用 SPM,所以我必须摸索很长一段时间才能找出正确的语法并让它发挥作用。这通常会导致几次错误的开始和错误,以及很多挫败感。

难道不应该有一个简单的“执行 A、B 和 C”步骤集来使这项工作无需清理一堆错误或手动编写 SPM Package.swift 文件吗?

IDE 不应该让我创建一个命令行工具,添加 swift-argument-parser 包,并第一次构建我的工具而不会出现错误吗?

swift
  • 1 个回答
  • 17 Views
Martin Hope
Duncan C
Asked: 2024-02-03 03:43:29 +0800 CST

如何从 SwiftUI 视图更改 didBecomeKeyNotification 闭包中的焦点字段?

  • 5

我正在编写一个多平台 SwifttUI 应用程序,并且希望当用户切换到另一个应用程序然后返回到我的应用程序时,Mac 版本将当前聚焦字段设置为特定字段。(为了完整起见,我将在 iOS 上执行相同的操作。)

为此,我尝试将此代码添加到我的视图的 init 中:

    let      didBecomeKeyNotification: NSNotification.Name =  {
        #if os(macOS)
            return NSWindow.didBecomeKeyNotification
        #else
            return UIApplication.didBecomeKeyNotification
        #endif
    }()

    NotificationCenter.default.addObserver(
        forName: didBecomeKeyNotification,
        object: nil,
        queue: nil) { _ in
            self.pointToFirstInputField()
        }

其中将( var)pointToFirstInputField()的值设置为当窗口再次成为关键窗口时我想要被选择的文本字段。focusedField@FocusState

但是,这给了我一个错误Escaping closure captures mutating 'self' parameter。

好的,我尝试将[weak self]捕获列表添加到我的闭包中。这给了我一个错误:“‘weak’只能应用于类和类绑定协议类型,而不是‘WordleView’”

这是有道理的,因为 SwiftUI 视图是一个结构 - 一个值类型。

那么这里的解决方案是什么呢?

编辑:

(请注意,链接的“重复”问题不是重复的。我没有使用使用目标/操作的通知版本。我使用的是采用闭包的较新版本。我的问题是关于如何调用变异函数来自我的闭包正文。)

它也不会让我使用捕获组来处理弱变量。

swift
  • 1 个回答
  • 30 Views
Martin Hope
Duncan C
Asked: 2023-12-05 23:38:35 +0800 CST

UIAlertController 的空子类可以安全地与“appearance(whenContainedInInstancesOf:)”一起使用

  • 7

有人想改变UIAlertAction特定按钮的行为UIAlertController,但不想改变其他按钮的行为。(他们想要一个警报的多行按钮标签,但所有其他警报的正常行为。)(这是另一个问题的链接。)

如果您阅读文档,UIAlertController它会说

UIAlertController 类旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改。

作为一个实验,我决定尝试创建一个虚拟的空子类UIAlertController,纯粹是为了给 UIAppearance 方法提供一个类名appearance(whenContainedInInstancesOf:)

虚拟子类的定义如下:

class FooController: UIAlertController {
}

然后我可以使用这个语句

        UILabel.appearance(whenContainedInInstancesOf: [FooController.self]).numberOfLines = 2

UILabel并特别在以下实例中覆盖 s 的出现FooController

它有效,看起来完美无缺。

您可以在此处从 Github 下载示例项目。

当您创建 vanilla 时UIAlertController,它的UIAlertAction按钮像平常一样具有单行标签。当您创建 时FooController,它的UIAlertAction按钮具有多行标签。

虽然它看起来工作得很好,但我对反对苹果文档中明确的声明而不是子类化持怀疑态度UIAlertController。

忽略该警告并使用空子类有哪些风险?

这是我的示例项目中的代码供参考:

import UIKit

class FooController: UIAlertController {
}

class ViewController: UIViewController {
    
    let buttonLabels = [
    """
    Button1
    line2
    """,
    """
    Button2
    line2
    """,
    """
    Button3
    line2
    """
    ]

    @IBAction func handleAlertButton(_ sender: Any) {
        presentAlert(type: UIAlertController.self)
    }
    
    @IBAction func handleFooButton(_ sender: Any) {
        presentAlert(type: FooController.self)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        UILabel.appearance(whenContainedInInstancesOf: [FooController.self]).numberOfLines = 2
    }
    
    func presentAlert(type: UIAlertController.Type) {
        let sheet = type.init(title: type.description(), message: nil, preferredStyle: .actionSheet)
        for buttonTitle in buttonLabels {
            let item = UIAlertAction(title: buttonTitle, style: .default) { (action) in
                print("Button \(buttonTitle) tapped")
            }
            sheet.addAction(item)
        }
        present(sheet, animated: true, completion: nil)
    }
}
  • 1 个回答
  • 28 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