Post

Replies

Boosts

Views

Created

SwiftUI Cell Background colour - don't fill full cell
I'm looking to see if its possible to change the background colour of a cell, but fill it based on a percentage I'm creating the cell in a List {} let gradient = LinearGradient(colors: [.green, .white], startPoint: .leading, endPoint: .trailing) List { Section(header: Text("Total")) { Text("Total Obtained: \(totalObtained) - \(totalComplete)%") .listRowBackground(gradient) } } totalComplete has the percentage variable
0
0
524
Apr ’23
Updating from Navigation view to NavigationStack
I'm currently using a navigationview and am now getting an warning 'init(destination:tag:selection:label:)' was deprecated in iOS 16.0: use NavigationLink(value:label:) inside a List within a NavigationStack or NavigationSplitView I'm trying to move to another view from a button (there will be several hence using tags) but I can't seem to get my head around how to do it. The code I currently have var body: some View { List { NavigationLink(destination: ProjectColourAddView(project: project), tag: 1, selection: $action) { EmptyView() } Group { Button(action: { self.showImageMenu = true }) { Text("New Title Image") } .confirmationDialog("Select Image Source", isPresented: $showImageMenu, titleVisibility: .visible) { Button("Take Photo") { self.isShowCamera = true } Button("Choose from Albums") { self.isShowPhotoLibrary = true } } Button(action: { self.action = 3 NSLog("More Images") }) { Text("More Images (x)") } Button(action: { self.action = 2 NSLog("Add Image") }) { Text("Add Image") } Button(action: { self.action = 1 NSLog("Colour List") }) { Text("Colour List") } } } }
2
0
664
Apr ’23
Check if data exists in cloud kit
My App does some importing when its first setup. I have it set to store core data in cloud kit. My issue is if you run it on one device, everything imports fine. Run it on a second, and it will import for a second time, duplicating the records. I'm trying to see if there's a way of checking if there is anything in cloud kit before running the import, but I'm always getting back false, even if I know there are records. The code I'm using to check is NSLog("Existance Check") checkIfExistsInCloudKit() { (result) in print(result) if result == false { NSLog("Does Not Exist") //let ImportData : ImportData = ImportData(viewContext: viewContext) //ImportData.importAll() } else { NSLog("Does Exist") } } NSLog("Existance Check Complete") and the function is func checkIfExistsInCloudKit(_ completion: @escaping (Bool) -> ()) { var result = false let container = CKContainer(identifier: "******") let privateDB = container.privateCloudDatabase let predicate = NSPredicate(format: "CD_brand = %@", "DMC") let query = CKQuery(recordType: "CD_Colour", predicate: predicate) privateDB.perform(query, inZoneWith: nil) { records, error in //guard let records = records else { return } result = true } completion(result) } 2023-04-15 14:07:28.092262+0100 Stitchers Companion[4553:113693] Existance Check false 2023-04-15 14:07:28.092897+0100 Stitchers Companion[4553:113693] Does Not Exist 2023-04-15 14:07:28.092962+0100 Stitchers Companion[4553:113693] Existance Check Complete
1
1
945
Apr ’23
Dynamically changing fetch request
I have the below fetch request which I want to be able to dynamically change the setup of. The request is setup initially as         sectionIdentifier: \.level,         sortDescriptors: [NSSortDescriptor(keyPath: \Card.level, ascending: true),                           NSSortDescriptor(keyPath: \Card.setID, ascending: true),                           NSSortDescriptor(keyPath: \Card.cardID, ascending: true),                           NSSortDescriptor(keyPath: \Card.name, ascending: true)],         animation: .default)     private var cards: SectionedFetchResults<Int16, Card> I've got the predicate change working fine, but get errors with the sort descriptors and the section identifier On setting the sort descriptors I get the error Cannot convert value of type 'NSSortDescriptor' to expected element type 'Array<SortDescriptor>.ArrayLiteralElement' (aka 'SortDescriptor') And setting the section identifier I get Cannot assign value of type 'SectionedFetchResults<String, Card>.Type' to type 'KeyPath<Card, Int16>' The code I have is below.                 if groupBy == 2 {                     cards.nsPredicate = nil                     let sortSetID = NSSortDescriptor(keyPath: \Card.setID, ascending: true)                     let sortName = NSSortDescriptor(keyPath: \Card.name, ascending: true)                     cards.sortDescriptors = [sortSetID, sortName] // This errors                     cards.sectionIdentifier = SectionedFetchResults<String, Card> // This errors                 }
1
0
919
Sep ’22
Collapsible section headers
I have a list with sections headers on two views. One view has the section headers as collapsible, the other doesn't. Both use pretty much the same code, what defines if a section header is collapsible? Code for the one that doesn't collapse ForEach(cards) { section in let header: String = nameForSectionHeader(sectionID: section.id) Section(header: Text(header)) { ForEach(section) { card in NavigationLink(destination: CardView(card: card)) { HStack { Image(card.imageName ?? "") .renderingMode(.original) .resizable() .scaledToFit() .frame(width: 50.0) VStack(alignment: .leading) { if let name = card.name, let id = card.cardID { Text("\(id) - \(name)") } Text("Owned: \(card.owned)") } } } } } } } and the code for the one that does ForEach(cards) { section in let header: String = nameForSectionHeader(sectionID: section.id) Section(header: Text(header)) { ForEach(section) { card in NavigationLink(destination: CardView(card: card)) { VStack(alignment: .leading) { if let name = card.name, let id = card.cardID { Text("\(id) - \(name)") } if let set = card.set, let setName = set.name { Text("Set: \(setName)") } if card.owned > 0 { Text("Owned: \(card.owned)") } } } } } } .listRowBackground(lightGreen) }
1
0
1.4k
Sep ’22
Change List row background colour programatically
I'm trying to change the background colour of a row in a list based on a value I have an Int16 value stored in card.owned and I want to change the background if this value is above 0, otherwise use the normal background. Previously with a table view I could change it with the cellForRowAtIndexPath method, but not sure how to do it with SwiftUI without changing every row Currently I have ForEach(cards) { section in let header: String = nameForSectionHeader(sectionID: section.id) Section(header: Text(header)) { ForEach(section) { card in NavigationLink(destination: CardView(card: card)) { VStack(alignment: .leading) { if let name = card.name, let id = card.cardID { Text("\(id) - \(name)") } if let set = card.set, let setName = set.name { Text("Set: \(setName)") } if card.owned > 0 { Text("Owned: \(card.owned)") } } } } } } .listRowBackground(lightGreen) }
0
0
496
Sep ’22
Filtered list when going back from pushed view
I have the below code for my view's body Currently when I go to the ItemDetailView View and then press back to return to this view, the filtered list is no longer there, it's back the full view. How to I get it to keep the filtered list when I go back? The text is still in the search bar         NavigationLink(destination: ItemAddView(series: series), isActive: $noItemsShowing) { EmptyView() }         List {             ForEach(items) { item in                 NavigationLink(destination: ItemDetailView(item: item)) {                     Text(fullItemName(item: item))                 }             }         }         .searchable(text: $searchText)         .onSubmit(of: .search) {             items.nsPredicate = NSPredicate(format: "series = %@", series)             if(!searchText.isEmpty) {                 items.nsPredicate = NSPredicate(format: "series = %@ AND amount > 0 AND name CONTAINS[cd] %@", series, searchText)             }         }         .onChange(of: searchText) { _ in             items.nsPredicate = NSPredicate(format: "series = %@", series)             if(!searchText.isEmpty) {                 items.nsPredicate = NSPredicate(format: "series = %@ AND amount > 0 AND name CONTAINS[cd] %@", series, searchText)             }         }         .navigationBarTitle("\(series.name ?? "Error") Items", displayMode: .inline)     }
2
0
631
May ’22
Cloud Kit - Synching image
I'm currently sharing data between devices using core data and cloud kit.Currently I have a "Picture" entity which stores the filename, the date it was added and a relation to another entity.The details in core data successfully syncs, how would I go about syncing the image file. The file is saved in the documents folder and I can get its file path usinglet imagePath = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent(imageName)Research seems to show I need to use CKAsset to upload/download the file but how do I go about doing this?
3
0
2.2k
May ’20