я хочу активировать навигационный контроллер при нажатии кнопки в классе UIView - PullRequest
1 голос
/ 28 марта 2019

Я хочу вызвать контроллер навигации на другой экран, когда я нажимаю кнопку в классе UIView. Как я могу это сделать?

// Код для класса UIView, в котором создан Iboutlet Button

import UIKit

protocol ButtonDelegate: class  {
    func buttonTapped()
}

class SlidesVC: UIView {

  var delegate: ButtonDelegate?

   @IBAction func onClickFinish(_ sender: UIButton) {

   delegate?.buttonTapped()

   }

   @IBOutlet weak var imgProfile: UIImageView!

    }

   //ViewController Class code in Which Button Protocol will be entertained

  class SwipingMenuVC: BaseVC, UIScrollViewDelegate {
         var  slidesVC = SlidesVC()

             override func viewDidLoad() {
                    super.viewDidLoad()

                    slidesVC = SlidesVC()
                    // add as subview, setup constraints etc
                    slidesVC.delegate = self

        }

extension BaseVC: ButtonDelegate {
  func buttonTapped() {

 self.navigationController?.pushViewController(SettingsVC.settingsVC(), 
            animated: true)

   }
   }

Ответы [ 2 ]

0 голосов
/ 31 марта 2019

Более простой способ - использовать typealias. Вы должны написать код в 2 местах. 1. ваш viewClass и 2. в вашем View Controller.

в вашем классе SlidesView добавьте typealias и определите тип параметра, если вам нужно, оставьте его пустым.

class SlidesView: UIView {
typealias OnTapInviteContact = () -> Void
var onTapinviteContact: OnTapInviteContact?

    @IBAction func buttonWasTapped(_ sender: UIButton) {
    if self.onTapinviteContact != nil {
      self.onTapinviteContact()
    }

  }
}

  class SwipingMenuVC: BaseVC, UIScrollViewDelegate {
             override func viewDidLoad() {
                    super.viewDidLoad()

                    let slidesView = SlidesView()
                    slidesView.onTapinviteContact = { () in
                    // do whatever you want to do on button tap
            }

        }
0 голосов
/ 28 марта 2019

Вы можете использовать шаблон делегата, чтобы сообщить содержащемуся ViewController, что кнопка была нажата, и позволить ей обрабатывать все, что необходимо сделать дальше. Представлению действительно не нужно знать, что происходит.

Базовый пример:

protocol ButtonDelegate: class {
   func buttonTapped()
}

class SomeView: UIView {
    var delegate: ButtonDelegate?

    @IBAction func buttonWasTapped(_ sender: UIButton) {
        delegate?.buttonTapped()
    }
}

class ViewController: UIViewController {
    var someView: SomeView

    override func viewDidLoad() {
       someView = SomeView() 
       // add as subview, setup constraints etc
       someView.delegate = self
    } 
}

extension ViewController: ButtonDelegate {
    func buttonTapped() {
        self.showSomeOtherViewController() 
        // or 
        let vc = NewViewController()
        present(vc, animated: true) 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...