注册
iOS

SwiftUI关于菜单 iOS 的长按 & macOS 右键的实现

长按 按钮或者图片出现菜单是个很平常的操作。


从app的icon 到app 内部的按钮 可以将内部的一些操作整合到这个特点内


SwiftUI 自带的菜单选择 ContextMenu


代码


ade3f506cb457cc3c7983a8442648b85.png


iOS 效果


e28219fab978fc821d87f49361f65bc9.gif

macOS


在mac上不是长按了,是右键的菜单操作


13132b8e84136d08c40e2239e2d9aa7c.png

文案可能要修改一下,应该叫 右键


这里有一个有趣的点,mac 版本的样式是没有图标。必须加一句

Button(action: { fileData.selectedFilesToOperate = [item] //单个  
fileWindow.isShowMoveFileView = true })
{ Label("移动", systemImage: "folder")
.labelStyle(.titleAndIcon)
}

但是现实的情况往往没有如此的简单,至少产品和老板的需求,都不是那么简单。下面几个我自己遇到的情况
可能不太全面,但是按图索骥应该可以给看遇到相似问题的人一点启发的感觉


问题1 菜单 不能太单调,分别来显示

Section {
Button1
Button2 ....
}

用section 包裹 可以让菜单有明显的分区


41406561e01bfb2222ba723c9b4aa1dd.png

问题2 菜单里面放点别的


那再放开一点,,contextMenu 内部 放点别的

      contextMenu {
// picker
// list
// toggle
// image...
}


4de0f09791b29e047222b915aec3e479.png

放入单选记得选什么的 Picker


d4a226ea0d5be624d117387b544772f4.gif

放入子菜单


这里用到了 Menu 这个标签


这个表情 也是个菜单,点击就有,不用长按。


菜单里面放菜单的效果


Menu {

                            Picker(selection: $sort, label: Text("Sorting options")) {

                                Text("Size").tag(0)

                                Text("Date").tag(1)

                                Text("Location").tag(2)

                            }

                        } label: {

                            Label("Sort", systemImage: "arrow.up.arrow.down")

                        }

这个效果挺有意思,和mac 的右键的子菜单一个效果。


7335b3c7e18ac9544a404509eba4a7cb.gif

这个放一切UI的效果,确实比较有趣。有兴趣可以尝试放入更丰富的控件。


SwiftUI 的控件我个人感觉的套路

  1. 一切view 都是声明的方式,靠@State 或者@Publish 一些的Modify来控制控件的显示数据
  2. 因为没有了生命周期,对于onAppair 和DisAppair的控制放在了每一个控件上的@ViewBuilder上,这个可以自定义,开始的时候都用自带的 @ViewBuilder
  3. View 都是Struct,class用的不多。
  4. View 里面包View,尽量做到了控件复用。而且是挑明了就是,比如之前的Text里面label,Button里面的Label,NavigationLink里面的View(也可以一切不同类型的View)

个人感觉这些都是在表面SwiftUI 打破以前Swift UIKit或者是OC中的UIKit的思维逻辑。


既: UI廉价 刷新廉价


让程序员 特别是iOS 开发过程中,不同状态的刷新UI ,回调刷新UI的开发复杂度


总结


对于一个控件的开始编写,到不停叠加复杂的情况,还有许多场景还没遇到和想到。目前SwiftUI的源码和网上的资料,还不如OC 如此内核的解析资料丰富。但是未来的iOS开发 一定是SwiftUI的时代,特别是对于个人开发者相比OC 友好程度明显。


作者:我不是豆豆
链接:https://juejin.cn/post/7240347693461569591
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

0 个评论

要回复文章请先登录注册