Существует базовый класс, соответствующий ViewModelInsertProtocol
с функцией insertToCollection()
. delegate
устанавливается в self в методе viewDidLoad
класса CollectionViewController
.
class CollectionViewController: UIViewController, ViewModelInsertProtocol {
func insertToCollection() {
print("asdasd")
collection.performBatchUpdates({
collection.insertItems(at: [IndexPath(row: viewModel.notes.count - 1, section: 0)])
}, completion: nil)
}
//MARK: -Variables
let reuseIdentifier = "cell"
var isEdit = false
var isSettingsEdit = false
var viewModel = ViewModel()
//MARK: -OUTLETS
@IBOutlet var mainView: UIView!
@IBOutlet weak var bacgroundImageView: UIImageView!
@IBOutlet weak var collection: UICollectionView!
@IBOutlet weak var addButton: UIButton!
@IBOutlet weak var sideViewConstraint: NSLayoutConstraint!
@IBOutlet weak var settingConstraint: NSLayoutConstraint!
@IBOutlet weak var sideView: UIView!
@IBOutlet weak var icon: UIButton!
@IBOutlet weak var settingButton: UIButton!
@IBOutlet weak var backgr: UIButton!
//MARK: - LifeCycle
override func viewDidLoad() {
super.viewDidLoad()
configureUI()
viewModel.delegate = self
}
Если я хочу добавить новый UICollectionCell, мне нужно перейти к другому popVC PopVC, и у моего Baseclass есть экземплярыviewModel
var viewModel = ViewModel () Я использую одну и ту же viewModel для обоих классов, посмотрите на SaveBtn здесь, в PopVC, в этом месте я использую метод делегата.
var viewModel = ViewModel()
//MARK: -Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
configure()
addObservers()
viewModel.popDelegate = self
}
override func viewWillDisappear(_ animated: Bool) {
viewModel.editSelected = false
}
func configure() {
saveBtnOutlet.visualButton()
xBtnOutlet.visualButton()
cancelBtnOutlet.visualButton()
firstCardColor.visualButton()
secondCardColor.visualButton()
}
@IBAction func CancelBtn(_ sender: Any) {
dismiss(animated: true, completion: nil)
}
@IBAction func saveBtn(_ sender: Any) {
viewModel.saveData(text: textF.text)
dismiss(animated: true, completion: nil)
}
rotocol ViewModelInsertProtocol: class {
func insertToCollection()
}
extension ViewModel {
func numberOfRows() -> Int {
return notes.count
}
}
class ViewModel {
var notes: Results<Model> {
get{
return realm.objects(Model.self)
}
}
weak var delegate : ViewModelInsertProtocol? = nil
weak var popDelegate: PopDelegate? = nil
var backgroundImageIndex = 0
var editSelected = false
let realm = try! Realm()
var size = Sizes.largeSize
var background: String = "wood"
func saveData(text: String) {
let newcard = Model()
newcard.note = text
RealmSerivce.shared.create(newcard)
print(notes.count)
if delegate == nil {print("nil")}
delegate?.insertToCollection()
}
Что не такс этим кодом?