init(animal_title: [String], animal_about: [String]){
self.animalName = animal_title
self.animalAbout = animal_about
}
private enum CodingKeys: String, CodingKey {
case animalName = "animal_title"
case animalAbout = "animal_about"
}
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
UITabBarItem
и UITabBarController
. Переопределеют нужные св-ва и методы. В первую очередь переопределить св-во selectedItems
на свой подкласс и методы выбора по нажатию, добавив в них layer
анимацию. path
залив его цветом .clear
. Путь - круг и идущая от него линия. Причём, если элемент самый крайний, то линия ток слева или справа, для остальных она в обе стороны. Останется добавить лишь strokeEndAnimation
, которая будет заливать цветом этот путь идя от начало пути в конец. Об этом хорошо написано тут: https://www.calayer.com/core-animation/2017/12/25/...СollectionViewCell
это View
, а TableViewController
это ViewController
, как бы совсем разные вещи. Имейте чёткое представление об этом. Правильный вопрос: Могу ли я в СollectionViewCell
добавить TableView
или вообще говоря любой View
? (Вы это спрашивали?)case deviceOwnerAuthenticationWithBiometrics
Indicates that the device owner must authenticate using biometry. // Юзаем только биометрию
case deviceOwnerAuthentication
Indicates that the device owner can authenticate using biometry or the device password. //Юзаем биометрия и если её нет, то Пароль
Подробности по каждому из методов можно найти там же. Подробности 2ого варианта if contex.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: nil) {
contex.evaluatePolicy(LAPolicy.deviceOwnerAuthentication, localizedReason: "Use TouchID", reply: { wasSuccessful, _ in
if wasSuccessful {
print("Все получилось")
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let homeVC = mainStoryboard.instantiateViewController(withIdentifier: "HomeVC")
self.navigationController?.pushViewController(homeVC, animated: true)
} else {
print("Что-то пошло не так")
}
})
}
guard let email = json["email"].string else
, но если бы ты внимательно смотрел на свой JSON, то увидел бы: for (index,subJson) in json {
print(subJson["email"].string)
}
то есть записи разных 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
}