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

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

SwiftUI 自带的菜单选择 ContextMenu

代码

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

juejin 的mark down 关于代码不太好用,直接贴图片了。

iOS 作用

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

macOS

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

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

案牍或许要修改一下,应该叫 右键

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

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

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

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

Section {
    Button1
    Button2 ....
} 

用section 包裹 能够让菜单有显着的分区

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

问题2 菜单里边放点其他

那再放开一点,,contextMenu 内部 放点其他

      contextMenu {
      // picker 
      // list
      // toggle
      // image...
      }
SwiftUI关于菜单 iOS 的长按 & macOS 右键的实现

放入单选记得选什么的 Picker

放入子菜单

这里用到了 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 的右键的子菜单一个作用。

这个放全部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 友爱程度显着。