Post not yet marked as solved
I want to programmatically set the constraints for the view. I'm using the code from Apple's Swift library:
Creating layout anchors
// Get the superview's layout
let margins = view.layoutMarginsGuide
// Pin the leading edge of myView to the margin's leading edge
myView.leadingAnchor.constraint(equalTo: margins.leadingAnchor).isActive = true
Link
But my code doesn't work.
import UIKit
class ViewController: UIViewController {
var myView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
myView.frame.size.width = 100
myView.frame.size.height = 100
myView.backgroundColor = .green
view.addSubview(myView)
let margins = view.layoutMarginsGuide
myView.trailingAnchor.constraint(equalTo: margins.trailingAnchor).isActive = true
}
}
I am not getting any error messages. But my view always stays in the same place, in the upper left corner. Even if I change the constraint to center or bottom, the view doesn't move.
Could you tell me what is wrong in my code?
Hello everyone, recently I started to learn the SwiftUI. Now I have this code but I don't understand how can I call a view in canvas? At the first case I have error which says that argument is missing.
import SwiftUI
struct EmployeeDetails: View {
var employee: Employee
var body: some View {
VStack(alignment: .leading) {
Text(employee.name)
.font(.largeTitle)
.foregroundColor(.primary)
Text(employee.jobTitle)
.foregroundColor(.secondary)
EmailAddress(address: employee.emailAddress)
}
}
}
struct EmployeeDetails_Previews: PreviewProvider {
static var previews: some View {
EmployeeDetails()
}
}
And when I use "employee" like argument in brackets, I have another error - can't find employee in scope.
struct EmployeeDetails_Previews: PreviewProvider {
static var previews: some View {
EmployeeDetails(employee)
}
}
Please, help me to understand how can I call that view?
I want to create a button, but for some reason it does not work. The text message is not printed in the console.
import SwiftUI
struct Test: View {
var body: some View {
NavigationView {
Text("My Test")
.navigationTitle("Welcome")
.toolbar {
Button("Help") {
print("Help tapped!")
}
}
}
}
}
struct Test_Previews: PreviewProvider {
static var previews: some View {
Test()
}
}
Post not yet marked as solved
For some reason, the top of my table view in the storyboard has turned black. This is where the navbar and dynamic cell are. This happened after I tried to customize the appearance of the table view by changing the values of two options - Style and Separator (the screenshot)
How do I get back the regular light color of the top of the table view?
Xcode 13.2, macOS Monterey 12.1
Hi everyone,
I want to perform the tutorial from video WWDC19 - 204. Here is an example of building the "Rooms" application. At 42 minutes, the author of the video, Jacob Xiao, shows how to add a new room. But when I try to repeat it, nothing happens. The new room is not added.
My code and code of Jacob Xiao are the same.
import SwiftUI
struct ContentView: View {
@ObservedObject var store = RoomStore()
// Instead of //var rooms: [Room] = []
// @ObservedObject is instead of @ObjectBinding
var body: some View {
NavigationView {
List {
Button(action: addRoom) {
Text("Add Room")
}
ForEach(store.rooms) { room in
RoomCell(room: room)
}
}
.navigationBarTitle(Text("Rooms"))
}
}
func addRoom() {
store.rooms.append(Room(name: "Hall 2", capacity: 2000))
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(store: RoomStore(rooms: testData))
}
}
struct RoomCell: View {
var room: Room
var body: some View {
NavigationLink(destination: RoomDetail(room: room)) {
Image(room.thumbnailName)
.cornerRadius(8)
VStack(alignment: .leading) {
Text(room.name)
Text("\(room.capacity) people")
.font(.subheadline)
.foregroundColor(.secondary)
}
}
}
}
My project has also an image named "Hall 2".
What could be the reason that a new room is not being added? Any ideas, please.
I want to mark the items in the list with checkmarks. But some kind of error occurs because the checkmark is installed, but not removed.
Why is this happening?
This is a Model:
import UIKit
struct Food: Codable {
var name: String
var isSelected: Bool = false
}
This is a TableViewController:
import UIKit
class SelectFoods: UITableViewController {
var foods = [Food]()
override func viewDidLoad() {
super.viewDidLoad()
foods = loadRealOrDemoData() // Load data
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return foods.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "selectFood", for: indexPath)
let food = foods[indexPath.row]
cell.textLabel?.text = food.name
// Assign checkmark from the selected item to the cell
if food.isSelected {
cell.accessoryType = .checkmark
} else {
cell.accessoryType = .none
}
cell.selectionStyle = .none
return cell
}
// MARK: - Select Food
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// Create variable and check it.
guard let cell = tableView.cellForRow(at: indexPath) else { return }
//Clean cell format before select
cell.accessoryType = .none
// Get an item
var item = foods[indexPath.row]
// Set checkmark
if item.isSelected == false {
cell.accessoryType = .checkmark
item.isSelected.toggle()
// Remove checkmark
} else {
cell.accessoryType = .none
item.isSelected.toggle()
}
}
}
Post not yet marked as solved
Sometimes I see weird posts here on the forum with an offer to call women?
What the hell? Admin wake up!
I am using a date picker and want to assign the value from it to an object property. But for some reason this does not happen and the object property contains nil.
I put code next to it where a date value is assigned to a simple property. It works.
Please tell me what's the matter here? How do I store a date into a property of an object?
import UIKit
struct NewDate {
var date: Date?
}
class MyViewController: UIViewController {
var newDate: NewDate?
@IBOutlet weak var pickerOutlet: UIDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
let date = pickerOutlet.date
print(date) // Prints: 2021-09-03 03:56:17 +0000
newDate?.date = pickerOutlet.date
print(newDate?.date) // Prints: nil
}
}
I want to use a Date Picker inside a TableViewCell but it shows some empty field - look the attached image.
What is it and how to remove that empty field?
Hi everyone,
I want to perform the tutorial from video WWDC19 - 204. Here is an example of building the "Rooms" application. At 11 minutes, the author of the video, Jacob Xiao, shows how he performs the extract subview operation. But when I try to repeat this operation an error occurs - Cannot find 'room' in scope.
My code and code of Jacob Xiao are the same.
import SwiftUI
struct ContentView: View {
var rooms: [Room] = []
var body: some View {
NavigationView {
List(rooms) { room in
ExtractedView()
}
.navigationBarTitle(Text("Rooms"))
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView(rooms: testData)
}
}
struct ExtractedView: View {
var body: some View {
NavigationLink(
destination: Text(room.name)) { // Cannot find 'room' in scope
Image(room.thumbnailName)
.cornerRadius(8)
VStack(alignment: .leading) {
Text(room.name)
Text("\(room.capacity) people")
.font(.subheadline)
.foregroundColor(.secondary)
}
}
}
}
I think the reason is that SwiftUI on my computer is a newer version, so some of the previous functions may not work.
Could you tell me how to perform this subview extract operation today?
Does SwiftUI now have a NavigationButton? And if not, what is it replaced by?
Post not yet marked as solved
Hi everyone,
I am studying SwiftUI on the Apple tutorial - https://developer.apple.com/tutorials/swiftui/creating-a-macos-app.
In the Creating a MacOS App chapter in section 3 Update a Row View, there is a following instruction: Step 6 Choose the WatchLandmarks target to see a watchOS preview of the list.
How to do this?
It should be easy and simple, but somehow I haven't found it.
Post not yet marked as solved
Hi everyone,
I'm trying to follow the Landmarks project tutorial and got stuck in the second part, in the second section (Create the Row View), step 6 where it says "Modify the text view to use the landmark property’s name." This must be done in the LandmarkRow.swift file.
https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation
The tutorial shows that after doing this, the preview will display the name of the landmark (Turtle Rock) instead of the usual "Hello world" greeting. But my replacement is not happening. Moreover, from this point on, the preview stops working. There are no error messages in the code, except for the message that the preview could not be performed.
I checked and rewrote the code several times, replaced the data source files, but nothing helped.
At the same time, the preview works well in other view files.
I can't figure out what's wrong with my code? Any ideas as to what the reason will be is appreciated.
Below is the code of two files, the LandmarkRow.swift, where view does not work, the second is ModelData.swift and it is related to the previous one.
LandmarkRow.swift
import SwiftUI
struct LandmarkRow: View {
var landmark: Landmark
var body: some View {
HStack {
landmark.image
.resizable()
.frame(width: 50, height: 50)
Text(landmark.name)
Spacer()
}
}
}
struct LandmarkRow_Previews: PreviewProvider {
static var previews: some View {
LandmarkRow(landmark: landmarks[0])
}
}
ModelData.swift
import Foundation
var landmarks: [Landmark] = load("landmarkData.json")
func loadT: Decodable(_ filename: String) - T {
let data: Data
guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
else {
fatalError("Couldn't find \(filename) in main bundle")
}
do {
data = try Data(contentsOf: file)
} catch {
fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
}
do {
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
} catch {
fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
}
}
I create a Detail screen using a standard TableViewController. The TableView-Content option is Static Cells, the Table View Sell-Style option is Basic. The label is used by default, not custom. With the help of this line of code below, I try to pass a value to the label:
tableView.cellForRow(at: [0,0])?.textLabel?.text = item!.itemID
The value comes to the controller, I see it, but for some reason it is not displayed on the label and displays a nil in the debugger.
What could be the mistake?
Post not yet marked as solved
Hi everybody,
There is one strange problem in my application. When the application is launched on the phone for the first time, it does not work for the first six seconds. After that everything works fine. The app also works fine when re-launched on the phone and when launched on the simulator.
The application itself is small and not complicated, all data is stored on the device. It uses a Tab Bar Controller with three tabs. Another strange feature is that if I click on the icons in these first six seconds, then nothing works right away, but then all the commands are executed. Those, it looks like the application has accepted the commands, but it takes a long time to execute them.
Has anyone faced such a problem? What could be causing this?
Any ideas are appreciated.
Swift 5.2, Xcode 11.6, macOS Catalina 10.5.6