小编Ste*_*nch的帖子

SKStoreKitReviewController和Darkmode

有什么办法可以改变SKStoreKitReviewController的颜色/色调吗?当我修改我的应用程序以支持DarkMode时,在黑暗模式下,显示的viewController看起来不太好。

在此处输入图片说明

ios skstorereviewcontroller ios13 ios-darkmode

12
推荐指数
1
解决办法
410
查看次数

SwiftUI 在点击 segmentedControl 时关闭键盘

我在 SwiftUI 中有一个 TextField,它需要使用不同的键盘,具体取决于由 SegementedControl() 选择器确定的 @State 变量的值。

当用户点击不同的段时,如何关闭键盘(如发送 endEditing 事件)?我需要这样做是因为我想更改键盘类型,如果 textField 是响应者,则键盘不会改变。

我有这个扩展:

extension UIApplication {
    func endEditing() {
        sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以做类似的事情

UIApplication.shared.endEditing()
Run Code Online (Sandbox Code Playgroud)

但是当用户点击不同的段时,我不知道在哪里或如何调用它。

我试过在 Picker 上放置一个 tapGesture 并且键盘确实关闭了,但是点击不会传递到选择器,所以它不会改变。

代码片段在这里:

@State private var type:String = "name"
Run Code Online (Sandbox Code Playgroud)

. . .

Form {
    Section(header: Text("Search Type")) {
        Picker("", selection: $type) {
            Text("By Name").tag("name")
            Text("By AppId").tag("id")
        }.pickerStyle(SegmentedPickerStyle())
    }

    Section(header: Text("Enter search value")) {
        TextField(self.searchPlaceHolder, text: $searchValue)
            .keyboardType(self.type == "name" ? UIKeyboardType.alphabet : UIKeyboardType.numberPad)
    }
}
Run Code Online (Sandbox Code Playgroud)

ios resignfirstresponder swiftui

9
推荐指数
2
解决办法
2703
查看次数

NSOrderedSet 和 SwiftUI ForEach

我正在尝试使用 CoreData 和 SwiftUI 并有两个实体;狗与行。Dog 之间是一对多的关系

public class Dog: NSManagedObject, Identifiable {
  @NSManaged public var name: String?
  @NSManaged public var walks: NSOrderedSet?
}
Run Code Online (Sandbox Code Playgroud)

和步行

public class Walk: NSManagedObject, Identifiable {
  @NSManaged public var date: Date?
  @NSManaged public var dog: Dog? 
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是在列表中显示所选狗的所有散步。下面的WalksView将显示当前所有的步行

struct WalksView: View {
@ObservedObject var dogWalksVM:DogWalkVM
var selectedIndex:Int
var body: some View {
    let currentDog = dogWalksVM.dogs[selectedIndex]
    return  List {
        if currentDog.walks == nil {
            EmptyView()
        } else {
            ForEach(0..<currentDog.walks!.count) { index in
                Text("Date \(self.walkDate(currentDog.walks![index] as! Walk))") …
Run Code Online (Sandbox Code Playgroud)

foreach nsorderedset swiftui

5
推荐指数
2
解决办法
3951
查看次数

Firebase 存储模拟器规则不起作用

我的应用程序工作正常,但当我使用 Firebase 模拟器时,我遇到了不遵守存储规则的问题。我已经下载了该storage.rules文件,它与该文件位于同一目录中firebase-json。模拟器套件启动得很好,我可以看到存储模拟器正在工作。但是,当我尝试上传图像(就像我在实时应用程序中所做的那样)时,出现错误。

Error while uploading file: Error Domain=FIRStorageErrorDomain Code=-13021 "User does not have permission to access gs://my-stuff-7796d.appspot.com/Profiles/0ye7psTQA4xR6DfjZRXjjtCWKyPw.jpg." UserInfo={object=Profiles/0ye7psTQA4xR6DfjZRXjjtCWKyPw.jpg, ResponseBody={"error":{"code":403,"message":"Permission denied. No WRITE permission."}}, bucket=my-stuff-7796d.appspot.com, data={length = 74, bytes = 0x7b226572 726f7222 3a7b2263 6f646522 ... 73696f6e 2e227d7d }, data_content_type=application/json; charset=utf-8, NSLocalizedDescription=User does not have permission to access gs://my-stuff-7796d.appspot.com/Profiles/0ye7psTQA4xR6DfjZRXjjtCWKyPw.jpg., ResponseErrorDomain=com.google.HTTPStatus, ResponseErrorCode=403}

存储规则是:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

再次强调,在实时 Firebase 上运行效果很好并且遵守规则。这是我的firebase.json文件

  "firestore": …
Run Code Online (Sandbox Code Playgroud)

rules emulation ios firebase-tools firebase-storage

5
推荐指数
1
解决办法
2047
查看次数

SwiftUI 视图和 Swift 包管理器

我正在尝试创建一个基本上是单个 SwiftUI 视图的 Swift 包。我在这里创建了一个示例来显示正在发生的事情。打包做什么,并不重要,我只是在视图中包含了一些 @State 和 @Binding 变量,这样我就会得到与我在真实包中得到的相同的错误。视图结构是这样的。

import SwiftUI

public struct SampleView: View {
    @Binding var myNum:Int
    @State var fixedText:String = ""
    var myText = ""
    var optional: String?


   public  var body: some View {
        VStack {
            if optional != nil {
                Text(optional!)
            }
            Text(myText)
            Text("Parent number: \(myNum)")
            Text("\(fixedText)")
            Button("Increment num") {
                self.myNum += 1
            }.foregroundColor(.blue)
            Button("Change Parent Text") {
                self.fixedText = "Only Changes Child"
            }.foregroundColor(.blue)
        }.background(Color.red)
            .foregroundColor(.white)
    }
}
Run Code Online (Sandbox Code Playgroud)

当我添加包并将其导入到我的项目中的一个视图中时,如果视图不是 Swift 包的一部分,我应该能够像这样使用 Do like this:

 SampleView(myNum: $myNum, …
Run Code Online (Sandbox Code Playgroud)

swift-package-manager swiftui

3
推荐指数
1
解决办法
1043
查看次数

UNUserNotificationCenter 需要将当前代码

我有一个用 Swift 编写的应用程序,它使用 UNUserNotificationCenter,当应用程序处于前台时,我让它显示通知。

我想要做的是在发送通知并且应用程序处于前台后更新 UI 下面显示的通知很好,但是当它显示时,我还想执行一个名为 updateUI() 的函数作为通知日期在我的用户界面中,我想在通知出现后立即清除它。

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler([.alert,.sound])
    }
Run Code Online (Sandbox Code Playgroud)

我不知道如何在完成处理程序中添加对 udateUI() 的调用。任何人都可以提供帮助吗?

xcode ios swift usernotifications unusernotificationcenter

2
推荐指数
1
解决办法
1839
查看次数