我正在尝试使用新的实体约束检查器在核心数据中设置约束(以使项目的名称唯一)。我读过的所有内容都表明这非常简单 - 设置约束并处理错误。我没有收到任何错误,并且可以根据需要多次添加相同的条目。
该应用程序确实需要 IOS 9.0,Xcode 工具要求设置为 7.0
约束category1Name 是一个字符串。
我的 addItem 代码是:
func addNewRecord() {
//check to be sure the entry is not empty
if (categoryTextField.text == "") {
//prompt requiring a name
let ac = UIAlertController(title: nil, message: "Name Required", preferredStyle: .Alert)
ac.addAction(UIAlertAction(title: "Ok", style: .Default, handler: nil))
self.presentViewController(ac, animated: true, completion: nil)
} else {
let newManagedObject = NSEntityDescription.insertNewObjectForEntityForName("Category1", inManagedObjectContext: kAppDelegate.managedObjectContext) as! Category1
newManagedObject.category1Name = categoryTextField.text
newManagedObject.category1Description = categoryTextView.text
//bunch more items...
//save it
kAppDelegate.saveContext()
makeEntryFieldsEnabledNO()
performSegueWithIdentifier("unwindToCategoriesTableViewController", …
Run Code Online (Sandbox Code Playgroud) 我希望我错了,但我一直无法找到与可编辑 UITextView 等效的 SwiftUI。因此,我使用 UIViewRepresentable 构建了一个。使用 ObservableObject 填充 SwiftUI 文本和我自己的视图有效 - 但在我的视图中所做的更新不会传播到 ObservableObject。我一定在绑定概念中遗漏了一些重要的东西。任何指导将不胜感激。
import SwiftUI
import Combine
struct ContentView: View {
@ObservedObject var myOText: MyOText
var body: some View {
ScrollView {
VStack {
Text("This is a bound Text View")
.padding(.top, 10)
.font(.headline)
Text(myOText.inTheCourse)
.lineLimit(3)
.padding()
Text("This is a multi-line UITextView wrapper:")
.font(.headline)
MultilineTextView(myOText: myOText)
.frame(height: 100)
.padding()
Spacer()
}
}
}
}
struct MultilineTextView: UIViewRepresentable {
@ObservedObject var myOText: MyOText
func makeUIView(context: Context) -> UITextView {
let view = …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用模式或掩码格式化 SwiftUI TextField 中的数据。(为清楚起见 - 不是 UITextField)。一个例子是美国的电话号码。因此,用户可以键入 1115551212,视图中的结果为 111-555-1212。在这种情况下,我将使用数字键盘,但为了将来,使用全键盘,如果用户键入非数字,我希望能够用某些内容替换它,例如 0。因此输入 111abc1212 将导致111-000-1212。尽管下面的代码将字符串转换为数字,但理想情况下,我希望掩码对字符串而不是数字进行操作 - 从而可以灵活地格式化零件编号等。
我已经能够使用通过按钮操作的函数来做到这一点,但当然我希望它是自动的。我使用 SwiftUI 修饰符来完成同样的事情完全不成功。在我的测试中,使用内置的 .textContentType(.telephoneNumber) 绝对没有任何作用。
我希望有一些像 .onExitCommand 这样的修饰符可以在焦点离开 TextField 时执行,但我没有看到解决方案。
此代码适用于该按钮(稍后我将添加规则以在需要数字时过滤数字):
struct ContentView: View {
@State private var phoneNumber = ""
@State private var digitArray = [1]
var body: some View {
VStack {
Group {//group one
Text("Phone Number with Format").font(.title)
.padding(.top, 40)
TextField("enter phone number", text: $phoneNumber)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding()
.keyboardType(.numberPad)
}//Group one
Group {//group two
Button(action: {self.populateTextFieldWithPhoneFormat(phoneString: self.phoneNumber)}) {
Text("Convert to Phone Format")
}
}//group …
Run Code Online (Sandbox Code Playgroud) SwiftUI 无法删除选择器上方的空间 - 表单版本
我在 SwiftUI 中为选择器的格式苦苦挣扎。我在单个视图应用程序中构建了一个带有其他一些视图的简单选择器。标题和选择器之间有一个我无法删除的空间。我会满足于将灰色设置为白色。如果我更改选择器的框架,它只会使选择器收缩 - 灰色空间保持不变。我什至不知道如何称呼那个空间 - 它似乎不是标题的一部分,也不是选择器,也不是表格或部分。
我发现的对这个问题的唯一参考是文章 57851878,它建议将视图放在标题本身中。这是行不通的,无论如何都是一个非常糟糕的主意。
图中勾勒出的红色空间为主体:
这是代码:
struct ContentView: View {
@State private var thing: String = ""
@State private var enableSaveButton = false
@State private var selection = 0
@State private var selection2 = 0
var things = ["books","desks","chairs","lamps","couches","shelves"]
var body: some View {
NavigationView {
//ScrollView{
VStack {
Group {//first group
VStack {
Text("Text at the Top")
TextField("enter something here", text: $thing)
.frame(width:350, height: 50)
.clipShape(RoundedRectangle(cornerRadius: 12))
.overlay(RoundedRectangle(cornerRadius: 12)
.stroke(Color.gray, …
Run Code Online (Sandbox Code Playgroud) 我正在努力在 SwiftUI 中找到一种方法来获取 TextField(或任何视图)原点的 x、y 坐标。我当然可以提供一个位置或偏移量来移动视图,但我似乎无法找到一种方法来获取对 TextField 的引用以获取其坐标。
在 UIKit 中,我相信我会使用 myTextField.frame.origin.x
这是一个非常简单的例子:
struct ContentView: View {
@State private var someNumber1 = "1000"
@State private var someNumber2 = "2000"
//bunch more
@State private var enteredNumber = "Some Text at the Top"
@State var value: CGFloat = 0
var body: some View {
ScrollView {
VStack {
Spacer()
Text("\(enteredNumber)")
Spacer()
Group { //1
TextField("Placeholder", text: $someNumber1)
.keyboardType(.default)
.textFieldStyle(RoundedBorderTextFieldStyle())
//this does not work
.onTapGesture {
let aY = (textfieldreferencehere).frame.origin.y
}
TextField("Placeholder", text: …
Run Code Online (Sandbox Code Playgroud) I have a SwiftUI app with SwiftUI App life cycle. I'm trying to setup a standard way to add typing debounce to TextFields. Ideally, I'd like to create my own TextField modifier that can easily be applied to views that have many textfields to edit. I've tried a bunch of ways to do this but I must be missing something fundamental. Here's one example. This does not work:
struct ContentView: View {
@State private var searchText = ""
var body: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试了解新的 SwiftData 框架。只要我在 SwiftUI 视图中完成所有操作,就很容易让它工作。我试图成为一名优秀的编码员并将数据与 UI 分开,但无法连接到 ModelContainer 并且 ModelContext 是一个类文件。
这是一个可以按原样运行的示例:
模型:
@Model
final public class Thing: Identifiable {
let myID = UUID()
var name: String
var comment: String
init(name: String, comment: String) {
self.name = name
self.comment = comment
}
}//struct
Run Code Online (Sandbox Code Playgroud)
ContentView:更改Button中的代码以创建10条测试记录以使用VM版本。
struct ContentView: View {
@StateObject var contentVM = ContentViewModel()
@Environment(\.modelContext) private var context
@State private var name: String = ""
@State private var comment: String = ""
@State private var selection: Thing?
@Query(sort: \.name) var things: …
Run Code Online (Sandbox Code Playgroud) 我无法理解 SceneKit 变换并将对象锚定到检测到的面部。我创建了一个人脸检测应用程序,并成功应用了带纹理和不带纹理的蒙版。我还成功应用了由文本(“00”)制成的“眼镜”,包括遮挡节点。
在这两种情况下,对象都会按预期随面部移动。然而,当我在 ScendKit 中创建一个由两个圆柱体制成的简单帽子时,其行为完全出乎意料。
首先,我似乎无法将帽子固定在脸上,但必须调整变换,使帽子几乎在每张脸上都出现在不同的位置。更糟糕的是,帽子的移动方向与脸部相反。将用户脸部向左旋转,帽子向右移动。将脸部向上旋转,帽子向下移动。
显然,我在这里遗漏了一些关于将对象锚定到面部的重要信息。任何指导将不胜感激。
Xcode 10 beta 3,在 iPhone X 上运行的 iOS 11.4.1。
帽子、眼镜、面具有一个单独的类:
class Hat : SCNNode {
init(geometry : ARSCNFaceGeometry) {
geometry.firstMaterial?.colorBufferWriteMask = []
super.init()
self.geometry = geometry
guard let url = Bundle.main.url(forResource: "hat", withExtension: "scn", subdirectory: "Models.scnassets") else {fatalError("missing hat resource")}
let node = SCNReferenceNode(url: url)!
node.load()
addChildNode(node)
}//init
func update(withFaceAnchor anchor : ARFaceAnchor) {
let faceGeometry = geometry as! ARSCNFaceGeometry
faceGeometry.update(from: anchor.geometry)
}//upadate
required init?(coder aDecoder: NSCoder) {
fatalError("(#function) has not been …
Run Code Online (Sandbox Code Playgroud) 未下载CloudKit公共记录和更改
我有一个CloudKit应用,其中包含公共区域和自定义私有区域的记录。我似乎已将更改令牌过程用于自定义私有区域,但是无法使公共数据正常工作。除了公用/专用名称和公用的默认区域外,我使用的代码对于两个数据库都是相同的。我知道订阅不适用于默认区域,但是我找不到任何引用来限制公共数据的更改令牌。Xcode 10.1,iOS 12.0
我创建我的PubicData类并对其进行初始化:
var publicDatabase : CKDatabase!
init() {
let kAppDelegate = UIApplication.shared.delegate as! AppDelegate
context = kAppDelegate.context
let container = CKContainer.default()
publicDatabase = container.publicCloudDatabase
}//init
Run Code Online (Sandbox Code Playgroud)
从应用程序入口场景调用的下载功能-表格视图:
func downloadPublicUpdates(finishClosure : @ escaping(UIBackgroundFetchResult) -> Void) {
var listRecordsUpdated : [CKRecord] = []
var listRecordsDeleted : [String : String] = [:]
var publicChangeToken : CKServerChangeToken!
var publicChangeZoneToken : CKServerChangeToken!
let userSettings = UserDefaults.standard
if let data = userSettings.value(forKey: "publicChangeToken") as? Data {
if let token = try? NSKeyedUnarchiver.unarchivedObject(ofClass : CKServerChangeToken.self, …
Run Code Online (Sandbox Code Playgroud) 我有一个具有 SwiftUI 生命周期的 SwiftUI 应用程序,我正在尝试让点击手势在 MKMapView 中工作。我似乎无法正确获取地图的参考。在本小节中我想做的就是点击地图并添加注释。然后我也会使用注释的坐标。
这是代码。
struct MapView: UIViewRepresentable {
typealias UIViewType = MKMapView
@State private var myMapView: MKMapView?
class Coordinator: NSObject, MKMapViewDelegate {
var control: MapView
let parent = MapView()
let sfCoord = CLLocationCoordinate2D(latitude: 37.7749, longitude: -122.4194)
init(_ control: MapView) {
self.control = control
}
func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
if let annotationView = views.first {
if let annotation = annotationView.annotation {
if annotation is MKUserLocation {
let region = MKCoordinateRegion(center: annotation.coordinate, latitudinalMeters: 2000, …
Run Code Online (Sandbox Code Playgroud) 我有一个 SwiftUI 应用程序,其中有几个视图是使用 UIViewRepresentable 制作的 MapKit 地图。我有兴趣点的自定义注释,并使用左右标注按钮进行进一步操作。在右侧,我只想显示有关航点的信息。在左侧,我想通过选择进一步的操作来发出警报 - 例如,插入一个新的注释点。在 SwiftUI 之前,我只是提出了一个警报并执行了上述两项操作。但据我所知, UIViewRepresentable 版本上没有 self.present 。因此,我无法显示警报。
仅用于实验 - 我将 SwiftUI 警报代码附加到调用 MapView 的 SwiftUI 视图。使用 Observable 布尔值,我确实可以同时发出这些警报。这对我来说似乎很奇怪,但也许绑定到全局属性的警报代码可以在任何地方。
我的第一次尝试:(结构是 DetailMapView)
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
if control == view.leftCalloutAccessoryView {
guard let tappedLocationCoord = view.annotation?.coordinate else {return}
let tappedLocation = CLLocation(latitude: tappedLocationCoord.latitude, longitude: tappedLocationCoord.longitude)
let ac = UIAlertController(title: nil, message: nil, preferredStyle: .alert)
let deleteAction = UIAlertAction(title: "Delete Waypoint", style: .destructive) { (action) in
//some stuff …
Run Code Online (Sandbox Code Playgroud) 我将文件存储在iCloud中作为备份方式.上传和下载文件似乎工作正常,但如果我删除设备上的应用程序并在同一台设备上重新安装应用程序,我就不会再看到上传到iCloud的文件(即使在删除应用程序之前从该设备上传).所有安装中的ubiquityIdentityToken都是相同的.我不是试图在设备之间同步,只是存储和检索.我可以在\ settings\icloud\manage storage \中查看文件,但不能通过运行此代码:
func createListOfSQLBaseFilesIniCloudDocumentsDirectory() -> [String]{
let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents")
var iCloudBackupSQLFiles = [String]()
do{
let directoryContents = try FileManager.default.contentsOfDirectory(at: iCloudDocumentsURL!, includingPropertiesForKeys: nil, options: [])
for myFile in directoryContents {
if myFile.pathExtension == "sqlite" {
let fileWithExtension = myFile.lastPathComponent
//backupSQLFiles is an array of full file names - including the extension
iCloudBackupSQLFiles.append(fileWithExtension)
}//if myFile
}//for in
} catch let error as NSError {
print("Unresolved error \(error), \(error.userInfo)")
}//do catch
return iCloudBackupSQLFiles
}//createListOfSQLBaseFilesIniCloudDocumentsDirectory
Run Code Online (Sandbox Code Playgroud)
任何指导将不胜感激.Swift 3,iOS 10,Xcode 8