我在 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) 我正在尝试使用 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) 我的应用程序工作正常,但当我使用 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) 我正在尝试创建一个基本上是单个 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 编写的应用程序,它使用 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() 的调用。任何人都可以提供帮助吗?
ios ×4
swiftui ×3
emulation ×1
foreach ×1
ios-darkmode ×1
ios13 ×1
nsorderedset ×1
rules ×1
swift ×1
xcode ×1