Display array in question label and button label [closed] - ios

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 2 years ago.
Improve this question
I have an array of questions and 3 answers and i want to display the question in the text label and the three answers in each button label. The text label and each button have an outlet. Im a begginer at swift and im having trouble extracting from the array
struct Questions {
let allQuestions = [
"The easiest way to learn is:",
"When buying clothes i usually make the decision on the basis of:"
]
let answers = [
[
"By viewing, reading, and observing how the others carry out certain tasks",
"By listening, discussing and doing according to verbal instructions",
"By doing and experimenting by myself",
],
[
"By their appearance and looks",
"Their practicality and use",
"How comfortable they are or how they feel"
]
]

// Initialise your struct
var questions = Questions()
//Keep track of what question you're on. Update this when you reload view
var questionNumber: Int = 0
//Add buttons to outlet collection
#IBOutlet var answerButtons: [UIButton]!
//Populating a question is simple
let aQuestion = questions.allQuestions[questionNumber]
yourQuestionLabel.text = "\(aQuestion)"
//For answers, loop through buttons outlet collection
for x in 0..<questions.answers[questionNumber].count {
answerButton[x].titleLabel?.text = "\(questions.answers[questionNumber][x])"
}

Related

How to update a label in a specific UITableViewCell without reloading all UITableView data? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 3 years ago.
Improve this question
I am trying to refresh the label in a UITableViewCell without having to refresh the entire table. This is for making a timer-app, where I will be refreshing the labels in the UITableView every second (when it's counting down).
Link to a simulator screenshot of the table view
In the past, I've tried reloading the data of the entire UITableView five times every second, but this results in sliding to delete being very inconsistent and hard to perform. I haven't succeeded in updating individual rows yet, so I don't know if that's a possible solution.
I couldn't find any similar question, but if you know that it's been asked before, please redirect me.
Any help would be greatly appreciated!
Thanks!
The most efficient way in Swift is a callback closure. It causes much less overhead than protocol/delegate or notification.
Run the timers in the data model.
In the model declare a callback property
var updateLabel : ((String) -> Void)?
and call it when the timer fires
#objc func timerDidFire(_ sender: Timer) {
updateLabel?("New Value") // replace "New Value" with the actual value
}
In cellForRowAt assign a closure to the updateLabel property to update the label
let model = datasourceArray[indexPath.row]
model.updateLabel = { value in
cell.textLabel.text = value
}
In tableView:didEndDisplaying:forRowAt: remove the closure
let model = datasourceArray[indexPath.row]
model.updateLabel = nil
If you can find out index of the respective label then you can easily get the cell and access the label and do what ever you want to do
let indexPath = IndexPath(row: 2, section: 0)
if let cell = tableView.cellForRow(at: indexPath) as? YourTableViewCell {
cell.YourLabel.backgroundColor = UIColor.green // write as per your requirement
}

Swift textfield text 1 to 9 if user entered need to show alert [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 4 years ago.
Improve this question
I am trying simple logic, I have only one textfield. into this textfield if user entered 1 to 9 I need to show alert using if.
if emailTextField.text < 0 {
print("100%")
}
UITextField's text is always a String. So if you need to check if it is a particular number, you need to cast the String value to an Int.
if let number = Int(emailTextField.text!), (0...9).contains(number) {
print("100%)
}
Note: You might want to check out the UITextFieldDelegate methods if your logic revolves around text field editing events.
yourTextField.addTarget(self, action: #selector(valueChanged(_:)), for: .valueChanged)
.
.
.
#objc func valueChanged(_ textField: UITextField) {
if let number = Int(emailTextField.text!), (0...9).contains(number) {
print("100%)
}
}
Sidenote: I have no idea what your use case is for this.

Have a Controller for Each Cell of a UICollectionView [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 5 years ago.
Improve this question
I have a UICollectionView with 4 Cells, I have a controller for those 4 pages called SwipingController.
I'd like to have a UIViewController for each cell, how can I achieve that ?
I counter advise on what you are going for.
Better just to have Views that manage their layout you don't need controllers to manage layout.
I don't think you will be able to hold a familiar architecture (MVC/MVVM/MVP/VIPER .. ) in the future if you go in this direction.
Also check this out. It will help you understand better the role of a view controller.
Nonetheless you can achieve this with addChildViewController(documentation here)
Add child view
let controller = storyboard?.instantiateViewController(withIdentifier: "test") as! UIViewController
self.addChildViewController(controller)
controller.view.frame = CGRect(0, 44, 320, 320)
self.view.addSubview(controller.view)
controller.didMove(toParentViewController: self)
Remove child view
let vc = self.childViewControllers.last
vc.removeFromSuperview()
vc.willMove(toParentViewController: nil);
vc.removeFromParentViewController()

Save UIDatePicker Value [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 6 years ago.
Improve this question
I have a date picker, I want to save the value user gave, so next time user goes back to that view controller, the date picker is still set to the value given last time.
Here's my code:
import UIKit
class Setting: UIViewController {
#IBOutlet weak var datePicker: UIDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
datePicker.datePickerMode = UIDatePickerMode.Time
// Do any additional setup after loading the view.
}
}
Cast it to a variable then load that variable into the data field!
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html

NSNotification for UIAlertController [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
Is there an option to observe and get the information about appearing and disappearing?
I want to grayscale my elements like apple ui-elements by appearing of UIAlertController!
Since now i found out that the "_UIBackdropViewComputeAndApplySettingsNotification" was called and contains userInfo about the appearing view.
You are going to make the UIAlertController's view appear, so how can you not know? You don't need to observe it; you're doing it (by calling presentViewController...).
That takes of what happens when the alert appears. What about when it disappears? Well, it disappears because the user tapped a button. You get to write the handler for every button in the alert. So again, you know when the alert is disappearing, because your handler is running.
The solution is, everything works automatically. You just have to implement..
override func tintColorDidChange() {
self.setNeedsDisplay()
}
..and of course working with the tintColor
Thanks matt for quick answer!
To expand on the other answers: each of your UIView subclasses should implement tintColorDidChange to be notified of the change.
Here's a sample implementation:
class someLabel : UILabel {
override func tintColorDidChange() {
let isInactive = self.tintAdjustmentMode == UIViewTintAdjustmentMode.Dimmed
if (isInactive) {
// modify subviews to look disabled
self.textColor = UIColor.grayColor()
} else {
// modify subviews to look enabled
self.textColor = self.tintColor
}
}
}
A few other good code samples (albeit in Objective-C) can be found in this SO question.

Resources