首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从UIKit调用的SwiftUI模式中的取消按钮

是指在使用SwiftUI开发iOS应用时,通过UIKit框架中的UIViewController来调用SwiftUI视图,并在视图中添加一个取消按钮。

取消按钮通常用于用户取消当前操作或返回上一级界面。在SwiftUI中,可以使用Button视图来创建一个取消按钮,并为其添加一个点击事件,以执行取消操作。

以下是一个示例代码:

代码语言:txt
复制
import SwiftUI
import UIKit

struct ContentView: View {
    var body: some View {
        VStack {
            Text("Hello, SwiftUI!")
                .font(.largeTitle)
            
            Button(action: {
                // 执行取消操作
                self.cancelAction()
            }) {
                Text("取消")
                    .font(.title)
                    .foregroundColor(.white)
                    .padding()
                    .background(Color.red)
                    .cornerRadius(10)
            }
        }
    }
    
    func cancelAction() {
        // 在这里执行取消操作
        // 可以通过UIKit中的UIViewController来进行相关操作
        let viewController = UIHostingController(rootView: EmptyView())
        UIApplication.shared.windows.first?.rootViewController = viewController
    }
}

// 在UIKit中调用SwiftUI视图
class UIKitViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let contentView = ContentView()
        let hostingController = UIHostingController(rootView: contentView)
        addChild(hostingController)
        view.addSubview(hostingController.view)
        hostingController.view.translatesAutoresizingMaskIntoConstraints = false
        hostingController.view.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
        hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        hostingController.didMove(toParent: self)
    }
}

在上述代码中,ContentView是一个SwiftUI视图,其中包含一个取消按钮。当用户点击取消按钮时,会调用cancelAction方法执行取消操作。在cancelAction方法中,可以通过创建一个UIHostingController来将一个空的SwiftUI视图设置为根视图,从而实现取消操作。

在UIKitViewController中,可以将ContentView作为根视图添加到UIViewController中,并将其显示在界面上。

这样,当从UIKit中调用UIKitViewController时,就可以显示包含取消按钮的SwiftUI视图,并在用户点击取消按钮时执行相应的取消操作。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

解析 SwiftUI 两处由状态更新滞后引发严重 Bug

这些控件基本上都是对 UIkit(AppKit)二次包装。Sheet执行下面的代码,你可以清楚地看到,在通过手势取消 Sheet 时,与其关联状态是在 Sheet 完成取消动画后才发生了改变。...而通过调用环境值或直接修改绑定状态,SwiftUI 则遵循了响应式编程原则,进行了先调整状态,后更新视图操作。...通过手势取消 Sheet 后,快速右滑导航容器会导致应用锁死这是一个在 SwiftUI 所有版本存在错误,你可以在众多论坛或聊天室里看到不少开发者都在寻找解决方法。...幸运是,我 @KyleSwifter 解密 SwiftUI 背后 AttributeGraph 一文中找到了线索。...随着版本提高,SwiftUI 功能也确实得到了相当程度增加。不过,即使在最新版本,在一些对 UIKit(AppKit)进行二次包装控件,仍有不少细节处理不到位问题。

705110

解析 SwiftUI 两处由状态更新滞后引发严重 Bug

视图变化在前、状态变化在后 在 SwiftUI ,某些可编程控件在执行一定操作时,会先更新视图,待视图变化完成后再修改与其对应状态。这些控件基本上都是对 UIkit(AppKit)二次包装。...而通过调用环境值或直接修改绑定状态,SwiftUI 则遵循了响应式编程原则,进行了先调整状态,后更新视图操作。...通过手势取消 Sheet 后,快速右滑导航容器会导致应用锁死 这是一个在 SwiftUI 所有版本存在错误,你可以在众多论坛或聊天室里看到不少开发者都在寻找解决方法。...幸运是,我 @KyleSwifter[4] 解密 SwiftUI 背后 AttributeGraph[5] 一文中找到了线索。...随着版本提高,SwiftUI 功能也确实得到了相当程度增加。不过,即使在最新版本,在一些对 UIKit(AppKit)进行二次包装控件,仍有不少细节处理不到位问题。

34420
  • SwiftUI TextField 进阶 —— 事件、焦点、键盘

    ,控制台输出为 textfield in form commit2textfield in form commit1textfield in group committext1 commit 请注意,调用顺序是外层向内...在 SwiftUI 3.0 ,苹果为开发者提供了一个远好于预期解决方案,同 onSubmit 类似,可以更高视图层次来统一对视图中 TextField 进行焦点判断和管理。...,我们可以直接通过 UIkit 提供方法来取消键盘 UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder...将键盘辅助视图集成到 toolbar 逻辑也有些令人令人费解。 通过 UIKit 创建 当前阶段,通过 UIKit 来创建键盘辅助视图仍是 SwiftUI最优方案。...相信再有 2-3 年,SwiftUI 主要控件原生功能就可以比肩对应 UIKit 控件了。 关于如何对 TextField 显示做更多定制,之后会撰文探讨。 希望本文对你有所帮助。

    13.3K10

    SwiftUI中使用UIKit视图

    如果你已经对如何使用UIViewRepresentable有所掌握,可以直接SwiftUI风格化部分阅读 基础 在具体演示包装代码之前,我们先介绍一些与在SwiftUI中使用UIKit视图有关基础知识...将UIKit视图包装成SwiftUI视图时,我们需要了解两者生命周期之间不同,不要强行试图找到完全对应方法,要从SwiftUI角度来思考如何调用UIKit视图。...例如,UIKit我们将一个代理对象附加到Text field视图上,当用户输入时,当用户按下return键时,该代理对象对应方法将被调用。...在协调器,我们可以通过双向绑定(Binding),通知中心(notificationCenter)或其他例如Redux模式单项数据流等方式,将UIKit视图内部状态报告给SwiftUI框架或其他需要模块...对于一些实现复杂功能UIKit模组,如果完全按照SwiftUI模式将其业务逻辑彻底剥离是非常困难。因此将无法剥离业务逻辑实现代码放入协调器,靠近代理方法,便于相互之间协调和管理。

    8.2K22

    AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架视频流App构建

    这包括一个播放按钮、一个静音按钮和用于前进和后退 15 秒跳过按钮。 2. Adding Remote Playback 那很容易,对吧? 如何远程 URL 添加视频播放? 那一定要难很多!...问题是你不能直接在 SwiftUI 中使用这个层。 毕竟 SwiftUI 没有 CALayer概念。 为此,您需要回到 UIKit。...你需要实现它方法来完成 UIKitSwiftUI 之间桥梁。...其次,您需要创建一种 LoopingPlayerView 调用这些方法方法。...您会在左上角看到画中画按钮……否则不会! 缺点是,在撰写本文时,iOS 14.5是可用最新版本,VideoPlayer SwiftUI 视图未显示画中画按钮

    7K10

    架构之路 (五) —— VIPER架构模式(一)

    开始 首先看下主要内容: 在本教程,您将了解如何在SwiftUI和Combine中使用VIPER体系结构模式,同时构建一个允许用户创建公路旅行iOS应用程序,来自翻译。...SwiftUI有自己独特做事方式。如果你将VIPER职责映射到域对象将会不同,如果你将它与UIKit应用教程相比较。 1....Creating a View with a Presenter SwiftUI视图模板创建一个新文件,并将其命名为TripListView.swift。...当将用户操作发送回数据模型时,VIPER模式甚至更有用。 为此,您将添加一个按钮来创建一个新旅程。...router处理从一个屏幕到另一个屏幕转换,设置下一个视图所需类。 在命令式UI范例——换句话说,在UIKit——路由router将负责显示视图控制器或激活segue。

    17.5K10

    自定义 Button 外观和交互行为

    相较于 UIKitSwiftUI 通过 Button 视图,让开发者以少量代码便可完成按钮创建工作。...label:目标按钮的当前视图,通常对应着 Button 视图中 label 参数内容role:iOS 15 后新增参数,用于标识按钮角色( 取消或具备破坏性)isPressed:当前按钮按压状态...而 TapGesture 在不松开手指情况下,如果移动到可点击区域外,SwiftUI 将不会调用 onEnded 闭包操作。...默认情况下,即使单元格视图中包含了多个按钮SwiftUI 也只会将 List 单元格视作一个按钮( 点击后同时调用所有按钮操作 )。...不再调用其指定闭包操作,附加手势需在 Button 之外添加( 例如下文 simultaneousGesture 实现 )为按钮添加 Trigger在 SwiftUI ,为了判断某个按钮是否被按下

    3.7K60

    解析SwiftUI布局细节(二)循环轮播+复杂布局

    如果你看了我们 Demo代码,你就知道我们是采用 TabView 嵌套 NavigationView 形式,在这样模式下似乎是存在问题, 在 TabView+NavigationView 你利用...和我们UIKit效果一样。...3、再提一点关于上面说滚动视图,在UIKit我们可以用UICollectionView搞定一切,但是在SwiftUI没有这个控件,我建议采用方式是 ScrollView + HStack + VStack...区别于我们UIKit创建方式,SwiftUI对它进行了简化,具体创建如下: /// SwiftUI对定时器简化,可以进去看看具体参数定义 private let timer = Timer.publish...= .zero /// 当前显示位置索引, /// 这是实际数据1就是数据没有被处理之前0位置图片 /// 所以这里默认1开始 @State var currentIndex

    12.1K20

    SwiftUI - 百行代码变十行,Swift再创辉煌

    而对于开发者来说,新发布 SwiftUI 可能是最吸引人特性,在 苹果公司软件工程高级副总裁Craig Federighi演示,我们可以轻松地把一百行前端代码缩减到十几行。...// 为什么需要 SwiftUI // 下面是来自王巍对UIKit诟病 UIKit 提供是一套符合直觉,基于控制流命令式编程方式。...不过,不管是使用便利性还是稳定性来说,UIKit 都面临着巨大挑战。我个人勉强也能算是 iOS开发“老司机”了,但是掉到 UIKit 坑里这件事,也几乎还是我每天日常。...当在设计工具工作时,所编辑内容会立刻反映到代码上,如果模拟器切换到手机,手机也能立马看到预览效果。 ?...简便动画创建方式 创建平滑动画就像添加一个方法调用一样简单。SwiftUI在需要时自动计算和动画转换。

    3K40

    TCA - SwiftUI 救星?(一)

    它不仅有更加合理异步方法和全新特性,更是修正了诸多顽疾。可以说, iOS 14 开始,SwiftUI 才算逐渐进入了可用状态。...而最近随着公司项目彻底抛弃 iOS 13,我也终于可以更多地正式在工作中用上 SwiftUI 了。 Apple 并没有像在 UIKit 贯彻 MVC 那样,为 SwiftUI ”钦定“ 一个架构。...SwiftUI 最基础状态管理模式,做到了 single source of truth:所有的 view 都是由状态导出,但是它同时也存在了很多不足。...我们真的需要一种架构,来让 SwiftUI 使用更加轻松一些。 Elm 获得启示 我估摸着前端开发圈子一年能大约能诞生 500 多种架构[8]。...为 Counter 补全所有测试 现在测试只包含了 .increment 情况。请添加减号和重置按钮相关测试。

    3.3K30

    SheetKit——SwiftUI模态视图扩展库

    开发SheetKit主要原因: •便于Deep link调用SwiftUI提供了onOpenURL方法让应用程序可以非常轻松响应Deep Link。但在实际使用,情况并不如预期。...主要因为SwiftUI重要视图展示模式:NavigationView、Sheet等都没有迅捷、简便重置能力。很难通过一两句代码将应用程序立即设置成我们想要视图状态。...因此,在此种情况下,通常我们会将所有的模态视图集中管理起来,统一调用。请参阅我之前文章——在SwiftUI,根据需求弹出不同Sheet[3]。...•新半高模态视图在WWDC 2021,苹果为大家带来了期待已久半高模态视图。或许推出比较仓促,这种很受欢迎交互方式并没有提供SwiftUI版本,仅支持UIKit。...interactiveDismissDisabled SwiftUI 3.0interactiveDismissDisabled加强版,在通过代码控制是否允许手势取消基础上,增加了当用户使用手势取消时可以获得通知能力

    2.9K20

    SwiftUI - 百行代码变十行,Swift再创辉煌

    而对于开发者来说,新发布 SwiftUI 可能是最吸引人特性,在 苹果公司软件工程高级副总裁Craig Federighi演示,我们可以轻松地把一百行前端代码缩减到十几行。...为什么需要 SwiftUI 下面是来自王巍对UIKit诟病 UIKit 提供是一套符合直觉,基于控制流命令式编程方式。...不过,不管是使用便利性还是稳定性来说,UIKit 都面临着巨大挑战。我个人勉强也能算是 iOS开发“老司机”了,但是掉到 UIKit 坑里这件事,也几乎还是我每天日常。...当在设计工具工作时,所编辑内容会立刻反映到代码上,如果模拟器切换到手机,手机也能立马看到预览效果。...创建平滑动画就像添加一个方法调用一样简单。

    2.3K30

    干货 | 关于SwiftUI,看这一篇就够了

    SwiftUI是一种新颖构建UI方式和全新编码风格,本文以通俗易懂语言,Swift 5.1语法新特性和SwiftUI优势方面进行分享,希望对热爱移动端同学有一定帮助,让大家尽可能快速、全面和透彻地理解...本文主要从以下三个方面讲述SwiftUI特性: 代码层面理解Swift 5.1新语法底层实现; 数据流方面阐述SwiftUI黑魔法; 布局原理层面阐述SwiftUI组件化优势; 二、...通过简单几行代码,设置了按钮点击事件,样式和文案。...通过该结构发现,与UIKit布局结构有很大不同,像按钮一些属性background、padding、cornerRadius等不应该出现在视图主结构,应该出现在Button视图结构。...同时SwiftUI也是支持frame设定,但也不会像UIKit那样作用于当前元素,在内部也是形成一个虚拟View来承载frame设定,在布局过程中进行frame计算最终显示出想要结果。

    8.8K11

    肘子 Swift 周报 #033|改善社区活跃度,仅更新论坛还不够

    在这篇文章,我将梳理首个版本起那些给我留下深刻印象 SwiftUI 关键更新及其影响。这不仅是对 SwiftUI 诞生到逐渐成熟过程回顾,也是一次对它所蕴含活力认识。...在这篇文章,Antoine van der Lee 探讨了如何以适合 SwiftUI 方式实施 MVVM 架构模式来构建视图。...Avoid These Common Errors When Switching from UIKit to SwiftUI ( UIKit 切换到 SwiftUI 时应避免常见错误 )[16]...Jeremy Gale[17] Jeremy Gale 在这篇文章探讨了 UIKit 开发者在学习 SwiftUI 时面临独特挑战。...文章详细分析了 UIKit 转向 SwiftUI 时常见误区,并通过具体代码重构示例展示了如何提升 SwiftUI 代码可读性和维护性。

    13410

    探索 App Clips

    ◆ ◆  ◆ 开发 App ClipsiOS14开始支持,所以可以直接用SwiftUI进行开发,这也是苹果所推荐开发形式。...外部调起时候就会传入一个URL过来,App Clips进行解析以调起对应页面。 有一点需要了解是,在WWDC2020,苹果演示是一个类似于微信小程序二维码那样异形码。...因为App Clips是iOS14推出,而SwiftUIiOS13推出,所以我们可以选择使用SwiftUI进行开发,这也是苹果推荐开发方案,当然也可以选择UIKit方式。...◆ ◆  ◆ 客户端代码 客户端进行开发时,无论采用UIKit还是SwiftUI,都是通过NSUserActivity对App Clips传入URL做解析处理,并根据URL处理不同业务逻辑,这块和 ...对于URL处理,使用UIKitSwiftUI处理方式不同,如果是UIKit则采用下面的方法处理URL传参。 UIKit通过UIScene代理方法接收回调,例如下面的方式。

    1.9K20

    如何判断 ScrollView、List 是否正在滚动

    本文将介绍几种在 SwiftUI 获取当前滚动状态方法,每种方法都有各自优势和局限性。...: UIScrollView, willDecelerate decelerate: Bool)手指拖动结束后( 手指离开时 ),调用此方法在 SwiftUI ,很多视图控件是对 UIKit( AppKit...目前 SwiftUI 在内部实现上去 UIKit( AppKit )化很明显,比如,本节介绍方法在 SwiftUI 4.0 已经失效方法二:Runloop我第一次接触 Runloop 是在学习 Combine...模式,因此无法有效地区分滚动是由那个控件造成方法三:PreferenceKey在 SwiftUI ,子视图可以通过 preference 视图修饰器向其祖先视图传递信息( PreferenceKey...待 SwiftUI 更多底层实现不再依赖 UIKit( AppKit )之时,才会是它 API 爆发期。希望本文能够对你有所帮助。

    3.8K40

    优化在 SwiftUI List 显示大数据集响应效率

    SwiftUI 应用代码,绝大多数视图标识都是通过结构性标识 (有关结构性标识内容可以参阅 ViewBuilder 研究(下) —— 模仿中学习[4])来实现 —— 通过视图层次结构(视图树...解决方案一 iOS 15 开始,SwiftUI 为 List 添加了更多定制选项,尤其是解除了对列表行分割线设置屏蔽且添加了官方实现。...由于整个滚动过程仅实例化并绘制了 100 多个子视图,对系统压力并不大,因此在经过反复测试后,首次点击 bottom 按钮会延迟滚动问题大概率为当前 ScrollViewProxy Bug...除非没有其他选择,否则我并不推荐大家对 UIKit ( AppKit ) 控件进行重新包装,应使用尽可能微小侵入方式对 SwiftUI 原生控件进行补充和完善。...总结 相较于 UIKit ,已经推出了 3 年 SwiftUI 仍有很多不足。但回首最初版本,现在我们已经可以实现太多以前无法想象功能。期盼 6 月 WWDC 会带来更多好消息。

    9.2K20

    SwiftUI搭建项目说起

    ,针对一个需求或者是一个新项目我们基本上都是写UI开始,根据设计图再编造一些假数据来做,只是在写过程及时效果也都是脑补!... SwiftUI 谈声明式 UI 与类型系统 跨平台: 在最新swiftUI 5.1,我们创建一个MultilPlatform App有了下面这些区别: ·Before func...---- 在我们日常开发,标签(TabBar)+ 导航(Na)形式模式是随处可见,我们这次目的是利用SwiftUI搭建这样一个场景构建一个基本应用,包括登录和数据处理以及iOS...View ---- 我自己觉得,要想从UIKit转换到SwiftUI,需要我们最先转变概念就是 Controller -> View 一个改变,在使用SiwftUI写UI过程,基本上是不在需要我们向...在UIKit我们导航、标签都是通过控制器来管理,但是在SwiftUI他们分别是通过NavigationView+TabView管理,我们得在认识上有一个基本转变,Controller到View

    4.5K20
    领券