当我们具有@Binding属性包装器时,@EnvironmentObject的用途是什么?我在弄清楚为什么需要@EnvironmentObject时遇到麻烦。我看了看这些发布内容,但与我在SwiftUI中 寻找 EnvironmentObject的内容不完全相同。如何使用BindableObjects(EnviromentObject)?
我还查看了他们的文档,这些文档太薄了。 https://developer.apple.com/documentation/swiftui/environmentobject
我担心的是我没有在应用商店上传,但是当我点击深度链接 url 调试模式应用程序没有在 Appstore 上打开它的重定向
我是 ABLR 来重定向我的调试应用程序。
我正在研究动态链接目标 c
因为我已经测试过我的应用程序在 firebase 中配置良好
但是当我与其他用户分享我的产品时,他们点击了它在 safari 上的重定向并且链接不起作用
每次我必须将链接和过去复制到 chrome 中,而且在这里弹出你的应用程序打开另一个应用程序然后重定向到应用程序...
我希望当我点击链接时直接重定向到应用程序而不是 SAFARI 或手动复制该链接然后打开应用程序
注意:应用程序不可用,我想打开我的调试应用程序的 url。
我已经配置了获取 appstoreid 和 teamid 的应用程序
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restoreHandler:
我的链接在 safari 中不起作用,但它在 chrome 上工作如何管理在 safari 上工作......
提前致谢。
objective-c ios firebase firebase-authentication firebase-dynamic-links
与工作MVVM在SwifUI。我的目标是拥有一个enum国家财产,ViewModel以便View可以根据国家财产自行调整。美国可能是:idle,busy,done和error。Ondone我想使用 导航到另一个屏幕NavigationLink,但问题是它期待 aBinding<Bool>并且我无法想出一种方法将我的枚举状态映射到 bool。
这是简化的代码:
struct LoginView: View {
@ObservedObject private var viewModel: LoginViewModel
@ViewBuilder
var body: some View {
...
// success state
NavigationLink(destination: HomeFactory().make(), isActive: self.$viewModel.state /* <---- some sort of mapping should come here */){ EmptyView() }
...
}
}
Run Code Online (Sandbox Code Playgroud)
希望我错过了一些非常基本的东西,并且可以以优雅的方式轻松实现。
编辑:
似乎应该可以使用下一个方法:
NavigationLink(destination: HomeFactory().make(), tag: .done, selection: self.$viewModel.viewState, label: { EmptyView() })
但是我收到一个错误,我无法弄清楚出了什么问题: Cannot …
无法弄清楚如何增大可单击区域以在swiftUI(iOS 13,Xcode 11.2)上打开键盘。我只能影响视觉外观,而不能影响用户可以单击的实际区域(可单击区域==,无论占位符文本的fontSize是什么。)
在swiftUI中创建TextField时,可以使用frame()来增加占位符文本的大小,我也可以使用fontsize来使框内的字体变大,但是没有任何事情可以使可点击区域(弹出键盘)变大而没有使字体变大大得多。
//用于修改TextField的代码
struct SignInModifier: ViewModifier {
func body(content: Content) -> some View {
return content
.padding(.all).font(.system(size: 18)).border(Color.purple).foregroundColor(Color.purple).shadow(radius: 2).frame(width: 350, height: 50)
}
}
Run Code Online (Sandbox Code Playgroud)
//我叫修饰符的地方
TextField("email address", text: $email).modifier(SignInModifier()).disableAutocorrection(true).keyboardType(.emailAddress)
Run Code Online (Sandbox Code Playgroud)
如果您在框架内的任何位置单击时,键盘都已打开/您能够在textField中键入内容,我就想这样做。但是,我只需要单击占位符文本的上部才能键入TextField。
作为我学习新技术的努力的一部分,我正在尝试在 SwiftUI 中实现我正在开发的应用程序的屏幕之一。我有这个粗略的布局:
此元素应拉伸以适应容器大小(不同宽度的设备),并将在 ScrollView 中使用。
这是我在一些绊脚石后想出的初步解决方案:
这对于第一次尝试来说效果很好,但我想通过将所有相关部分移动到一个单独的视图中来重构视图。除此之外,我希望新视图能够自动考虑我稍后可能添加的填充和其他大小修改。
所以,这是一个天真的重写:
正如您很容易发现的那样,ScrollView 中的 GeometryReader 假定父级提供的大小,有效地隐藏了大部分 View。
这种情况有几种“肮脏”的解决方案:为 View 设置一个固定的框架高度,设置一个接近正确大小的纵横比(考虑到有固定高度的 Text 视图,这有点棘手),保持 GeometryReader 作为最外层主视图的元素并将宽度作为初始化参数传递给子视图。
我正在为这个特定的布局寻找一个“干净”的解决方案,也许是为了更全面地了解 Views 是如何 SwiftUI 调节它们的大小的——在 WWDC 视频中,据说父 View 提出了一个大小,但随后子 View 返回了它自己的尺寸;有没有办法以某种方式干预该过程,还是全部通过私有 API 完成?
谢谢!
–巴格兰
ps 我认为除了 UI 预览之外的代码截图是最能说明问题的,但如果我也应该提供代码片段,请告诉我!
我试图通过在特定文件夹中的所有(大约 200 个)通行证上运行循环并为每个通行证调用generateBestRepresentation(for:) 来创建多个钱包通行证(.pkpass)的缩略图。
\n\n这是代码:
\n\nlet passesDirURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("Passes")\nlet size = CGSize(width: 1600, height: 1600)\nlet scale = UIScreen.main.scale\n\nif let passURLs = try? FileManager.default.contentsOfDirectory(\n at: self.passesDirURL,\n includingPropertiesForKeys: nil,\n options: .skipsHiddenFiles\n ),\n !passURLs.isEmpty {\n for passURL in passURLs {\n // Create the thumbnail request.\n let request = QLThumbnailGenerator.Request(\n fileAt: passURL,\n size: size,\n scale: scale,\n representationTypes: .thumbnail\n )\n\n // Retrieve the singleton instance of the thumbnail generator and generate the thumbnails.\n let generator = QLThumbnailGenerator.shared\n generator.generateBestRepresentation(for: request) { …Run Code Online (Sandbox Code Playgroud) 在 swift 4. 我试过如下:-
let switchOnOff = UISwitch(frame:CGRect(x: 150, y: 150, width: 200, height: 0))
switchOnOff.addTarget(self, action: #selector(self.switchStateDidChange), for: .valueChanged)
switchOnOff.setOn(true, animated: false)
self.view.addSubview(switchOnOff)
@objc func switchStateDidChange(sender:UISwitch){
if (sender.isOn == true){
sender.setOn(true, animated: false)
//sender.onImage = UIImage(named: "edit.png")
}
else{
sender.setOn(false, animated: false)
//sender.offImage = UIImage(named: "offSwitch.png")
}
}
Run Code Online (Sandbox Code Playgroud)
sender.onImage 、 sender.offImage 在这个 ios 10+ 版本中不起作用。然后我尝试使用sender.tag,sender.text
这些也不起作用。在谷歌搜索中没有得到任何适当的帮助。所以如果你已经解决了这个问题,请帮助我。
谢谢你们。
这个问题与此有关:如何使用SwiftUI和Combine观察TextField的值?
但是我要问的是比较笼统的。这是我的代码:
struct MyPropertyStruct {
var text: String
}
class TestModel : ObservableObject {
@Published var myproperty = MyPropertyStruct(text: "initialText")
func saveTextToFile(text: String) {
print("this function saves text to file")
}
}
struct ContentView: View {
@ObservedObject var testModel = TestModel()
var body: some View {
TextField("", text: $testModel.myproperty.text)
}
}
Run Code Online (Sandbox Code Playgroud)
场景:随着用户在文本字段中键入内容,应该调用saveTextToFile函数。由于这是保存到文件,因此应放慢/限制它。
所以我的问题是:
我想在这里使用响应作为一种通用模式:我们应该如何处理SwiftUI应用程序(而非UIKit应用程序)中的组合内容。
我正在尝试根据计算属性在 Swift 中显示警报。基本上,每当用户单击按钮时,“round”的值就会更新。当进行超过 10 轮时,会显示警报。
为此,我创建了一个名为“showingAlert”的布尔变量。这必须是一个 @State var,以便当用户关闭警报时它会再次设置为 false。
但是,编译器告诉我像 @State 这样的属性包装器“不能应用于计算属性”:-(
这是我尝试过的代码:
@State var round = 0
@State var showingAlert:Bool {round > 10 ? true : false}
func result(player: Int, app: Int) {
if player > app {
round += 1
}
else {
round += 1
}
}
var body: some View {
Button(action: {self.result(player: 1, app: 1)}) {
Text("Button")
}
.alert(isPresented: $showingAlert) {
Alert(title: Text("title"), message: Text("message"), dismissButton: .default(Text("Continue"))
)
}
Run Code Online (Sandbox Code Playgroud)
有什么办法解决这个问题吗?我很想创建一个不显示错误消息的警报。
我想为文件(word、excel、video ....)创建一个缩略图图像,这是我所做的:
import QuickLook
class ThumbsCreator: NSObject {
private var file : File?
init(file: File?) {
super.init()
self.file = file
}
func createThumb() {
let url = URL(string: (self.file?.path()))
}
Run Code Online (Sandbox Code Playgroud)