button.translatesAutoresizingMaskIntoConstraints = false
if #available(iOS 11.0, *) {
button.rightAnchor.constraint(equalTo: tableView.safeAreaLayoutGuide.rightAnchor, constant: -10).isActive = true
button.bottomAnchor.constraint(equalTo: tableView.safeAreaLayoutGuide.bottomAnchor, constant: -10).isActive = true
}
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("Что-то пошло не так")
}
})
}
var panRecognizer = UIPanGestureRecognizer(target: self, action: #selector(move))
panRecognizer.minimumNumberOfTouches = 1
panRecognizer.maximumNumberOfTouches = 1
panRecognizer.delegate = self
yourView.addGestureRecognizer(panRecognizer)
@objc func move(_ sender: Any) {
if (sender as? UIPanGestureRecognizer)?.state == .changed {
// This will return you location in view
let currentPoint: CGPoint = sender.location(in: view)
// This will return you location in Scrollview
let scrollPoint: CGPoint = sender.location(in: sender.view.superview)
}
}
class MultiScrollViewController: UIViewController {
// ...
override func viewDidLoad() {
super.viewDidLoad()
firstView.delegate = self
secondView.delegate = self
}
// ...
}
extension MultiScrollViewController: UIScrollViewDelegate {
func scrollViewDidScroll(scrollView: UIScrollView) {
firstView.contentOffset = scrollView.contentOffset
secondView.contentOffset = scrollView.contentOffset
}
}
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)