2016-11-28 2 views
0

У меня есть ButtonClass, у которого есть метод buttonTapped.Доступ к контроллеру доступа с помощью кнопки

Сама кнопка находится на виду. Мне нужно добавить дополнительный слой, когда кнопка нажата, но у меня нет доступа к себе в ButtonClass, потому что self - это кнопка, а не вид ... В основном мне нужно получить доступ к self.view, находящемуся в viewController, но это другое класс. Если я создаю новый экземпляр, такой как viewController(), это не поможет, потому что он не будет одним и тем же экземпляром.

+0

Мы не будем понимать ваш вопрос, если вы не будете ставить более подробную информацию, как код, раскадровки дизайн и т.д. – Santosh

+0

Вы может получить доступ к вашей цепочке 'superiew', но лучше использовать шаблон делегирования для вызова метода в контроллере представления с помощью кнопки или поместить обработчик действий в контроллер вида – Paulw11

ответ

1

Если вы добавляете метод buttonTapped из класса пользовательской кнопки, вам необходимо создать делегат и вызвать метод делегата, когда пользователь вызывает метод buttonTapped.

В пользовательском классе кнопки

protocol YourCustomButtonDelegate { 
    func changeSomethingInTheView() 
} 

class YourCustomButtonClass { 

    var delegate: YourCustomButtonDelegate? 

    func buttonTapped(_ sender: AnyObject) { 
     if let delegate = delegate { 
      delegate.changeSomethingInTheView() 
     } 
    } 
} 

И в ViewController

class ViewController: UIViewController, CustomCellDelegate { 

    @IBOutlet weak var button: YourCustomButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     button.delegate = self 
    } 

    func changeSomethingInTheView() { 
     // write your code here... 
    } 
} 
+0

Привет @J. Koush, Спасибо за ваш ответ, я попытался его реализовать, но кажется, что «если делегат = делегировать {« терпит неудачу, потому что он жалуется, что делегат является неразрешенным идентификатором ... – Marin

+0

@Marin Вам нужно создать переменную делегата в своей пользовательской кнопке класс, как этот 'var delegate: YourCustomButtonDelegate?' –

+0

"button.delegate = self" throws "не может назначить viewController для ввода« buttonDelegate ».... – Marin