长按 按钮或许图片出现菜单是个很往常的操作。
从app的icon 到app 内部的按钮 能够将内部的一些操作整合到这个特点内
SwiftUI 自带的菜单选择 ContextMenu
代码
juejin 的mark down 关于代码不太好用,直接贴图片了。
iOS 作用
macOS
在mac上不是长按了,是右键的菜单操作
案牍或许要修改一下,应该叫 右键
这里有一个风趣的点,mac 版其他样式是没有图标。必须加一句
Button(action: { fileData.selectedFilesToOperate = [item] //单个
fileWindow.isShowMoveFileView = true })
{ Label("移动", systemImage: "folder")
.labelStyle(.titleAndIcon)
}
可是现实的情况往往没有如此的简略,至少产品和老板的需求,都不是那么简略。下面几个我自己遇到的情况 或许不太全面,可是按图索骥应该能够给看遇到类似问题的人一点启发的感觉
问题1 菜单 不能太单调,分别来显现
Section {
Button1
Button2 ....
}
用section 包裹 能够让菜单有显着的分区
问题2 菜单里边放点其他
那再放开一点,,contextMenu 内部 放点其他
contextMenu {
// picker
// list
// toggle
// image...
}
放入单选记得选什么的 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 的控件我个人感觉的套路
- 全部view 都是声明的方式,靠@State 或许@Publish 一些的Modify来操控控件的显现数据
- 由于没有了生命周期,关于onAppair 和DisAppair的操控放在了每一个控件上的@ViewBuilder上,这个能够自定义,开端的时候都用自带的 @ViewBuilder
- View 都是Struct,class用的不多。
- View 里边包View,尽量做到了控件复用。并且是挑明晰就是,比方之前的Text里边label,Button里边的Label,NavigationLink里边的View(也能够全部不同类型的View)
个人感觉这些都是在表面SwiftUI 打破以前Swift UIKit或许是OC中的UIKit的思维逻辑。
既: UI廉价 改写廉价
让程序员 特别是iOS 开发过程中,不同状况的改写UI ,回调改写UI的开发复杂度
总结
关于一个控件的开端编写,到不断叠加复杂的情况,还有许多场景还没遇到和想到。现在SwiftUI的源码和网上的材料,还不如OC 如此内核的解析材料丰厚。可是未来的iOS开发 一定是SwiftUI的时代,特别是关于个人开发者相比OC 友爱程度显着。