Архитектурный шаблон "Мрак в моделях" на нескольких языках и платформах
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

54 lines
1.4KB

  1. import Combine
  2. import UIKit
  3. // MARK: - Ядро-VC
  4. extension Main {
  5. class Core: UIViewController {
  6. let didSelectButton = PassthroughSubject<Int, Never>()
  7. var buttons = [UIButton]()
  8. var subscriptions = [AnyCancellable]()
  9. override func viewDidLoad() {
  10. super.viewDidLoad()
  11. view.backgroundColor = .white
  12. // Создаём 16 кнопок.
  13. for i in 0..<16 {
  14. let btn = UIButton()
  15. btn.tag = i
  16. view.addSubview(btn)
  17. buttons.append(btn)
  18. }
  19. // Расставляем кнопки в сетке 4x4.
  20. for (id, p) in memoryItemPositions(c: M()).enumerated() {
  21. let btn = buttons[id]
  22. btn.frame =
  23. CGRect(
  24. x: CGFloat(p.x),
  25. y: CGFloat(p.y),
  26. width: CGFloat(memorySide()),
  27. height: CGFloat(memorySide())
  28. )
  29. btn.backgroundColor = .blue
  30. }
  31. // Учитываем нажатия кнопок.
  32. for btn in buttons {
  33. btn.addTarget(self, action: #selector(Main.Core.selectButton), for: .touchUpInside)
  34. }
  35. // Выводим номер нажатой кнопки.
  36. didSelectButton
  37. .sink { i in print("ИГР MainP.viewDL didSB: '\(i)'") }
  38. .store(in: &subscriptions)
  39. }
  40. @objc func selectButton(_ btn: UIButton) {
  41. didSelectButton.send(btn.tag)
  42. }
  43. }
  44. }