то есть записи разных TableViewCell могли перемешиваться между собой в таблице- ну так Вы ведь сами определяете какого типа будет ячейка для текущего indexPath. В чём проблема?
Как сделать так , чтобы записи сортировались в таблице по последнему добавлению?- данные сортируются либо предикатами CoreData, а если для Вас это не работает и Вам надо отсортировать то, что уже и так показано в таблице, то отсортируйте ваш массив с данными так как Вам надо и вызовите метод reloadData() вашего tableView. Это операция очень затрата, если ваша таблица очень большая, там есть и другие методы, проще. Смотрите документацию UITableView https://developer.apple.com/documentation/uikit/ui...
let sections2 = fetchedResultsController2.sections
, пройдите её и выведите в консоли вот так e sections2
или e dump(sections2)
CoreData
, то должны быть и разные UITableViewCell
для отображения данных разных сущностей. Тогда в методе func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
не возникнет труда понять, с какой сущностью Вы работаете сейчас, ведь у каждого типа UITableViewCell
есть свой уникальный идентификатор. Ну а по нему Вы и сможете понять куда делать переход. if UserDefaults.standard.object(forKey: "country") != nil {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootVC = storyboard.instantiateViewController(withIdentifier: "TabBarController") as? UITabBarController
window?.rootViewController = rootVC
}
Discussion
Attempting to remove more elements than exist in the collection triggers a runtime error.
Calling this method may invalidate all saved indices of this collection. Do not rely on a previously stored index value after altering a collection with any operation that can change its length.
import Foundation
var data = Data([0, 1, 2, 3, 4, 5])
var newData = data.filter{$0 < 5}
print(newData.index(of: 5) ?? "Ooops") // Ooops
UIWindow
. В этом классе настраиваются все основные потребности вашего приложения, будь то Push Notifications или Voice Calls и так далее. Я бы сказал это Core вашего приложения.UIResponder
и UIApplicationDelegate
An abstract interface for responding to and handling events.
A set of methods that are called by the singleton UIApplication object in response to important events in the lifetime of your app.
UITextField
и ты постоянно бегаешь туда сюда, то их надо где-то сохранять. UITableViewDataSource/UITableViewDelegate
. Но передача в методе prepare тоже вполне себе нормальный вариант. Google Custom search- это работа с сетью в Swift:
отображать их в collection view-
Потом при нажатии на ячейку показывать полную картинку с названием- что бы это было красиво
@IBAction func buttonPressed(_ sender: UIButton) { ... }
есть аргумент sender
по которому Вы и можете различать какая именно кнопка вызвала этот action. А вообще бы лучше основную свою задачу описали, а то так не очень понятно что Вы хотите. Зачем Вам findById( findByClass ) ? Для этого есть IBOutlets
. Если Вы ищите кнопку среди subviews
, то тут можно приводить каждый subview
к типу UIButton
(если это возможно) и смотреть скажем его title
или смотреть его RestorationID. UISearchController
, а обычный UISearchBar
c кастомным аниматором UIViewPropertyAnimator
. import UIKit
class ViewController: UIViewController {
@IBOutlet weak var textField: UITextField!
private var substrateView = UIView()
private var substrateLabel = UILabel()
private var constraint = NSLayoutConstraint()
@IBAction func someAction(_ sender: Any) {
substrateView.isHidden = false
UIView.animate(withDuration: 0.3) { [unowned self] in
self.constraint.isActive = false
self.constraint = self.substrateView.heightAnchor.constraint(equalToConstant: 60)
self.constraint.isActive = true
self.view.layoutIfNeeded()
}
}
override func viewDidLoad() {
super.viewDidLoad()
textField.layer.borderWidth = 3
textField.layer.borderColor = UIColor(red: 233/255, green: 128/255, blue: 129/255, alpha: 1).cgColor
textField.layer.cornerRadius = 8
substrateView.backgroundColor = UIColor(red: 233/255, green: 128/255, blue: 129/255, alpha: 1)
substrateView.layer.cornerRadius = 8
substrateLabel.text = "Login is not valid"
substrateLabel.textAlignment = .center
substrateLabel.textColor = UIColor.white
substrateLabel.backgroundColor = UIColor.clear
substrateView.addSubview(substrateLabel)
substrateLabel.translatesAutoresizingMaskIntoConstraints = false
substrateLabel.frame = CGRect.zero
substrateLabel.sizeToFit()
substrateLabel.bottomAnchor.constraint(equalTo: substrateView.bottomAnchor).isActive = true
substrateLabel.centerXAnchor.constraint(equalTo: substrateView.centerXAnchor).isActive = true
view.addSubview(substrateView)
substrateView.translatesAutoresizingMaskIntoConstraints = false
substrateView.topAnchor.constraint(equalTo: textField.topAnchor).isActive = true
substrateView.leftAnchor.constraint(equalTo: textField.leftAnchor).isActive = true
substrateView.rightAnchor.constraint(equalTo: textField.rightAnchor).isActive = true
substrateView.widthAnchor.constraint(equalTo:textField.widthAnchor).isActive = true
constraint = substrateView.heightAnchor.constraint(equalTo: textField.heightAnchor)
constraint.isActive = true
textField.layer.zPosition = 1
substrateView.isHidden = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}