Я пытаюсь использовать протокол/делегат в swift, и пока я не получаю никаких ошибок, кажется, что мой делегат не создается. Он возвращает мне ноль, и я не уверен, почему.Протокол делегата не работает, возвращает nil
Вот мой код
Класс 1
import UIKit
protocol GameViewSliding{
func slideGameView()
}
class GameDetailsViewController: UIViewController {
var delegate:GameViewSliding?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func showOptions(sender: AnyObject) {
println("button pressed")
println(delegate)
delegate?.slideGameView()
}
}
Class 2, что соответствует протоколу
import UIKit
var currentHoleNumber:Int = 0
var parThree = false;
var parFive = false;
class GameViewController: UIViewController, GameViewSliding{
var gameDetailsVC:GameDetailsViewController = GameDetailsViewController()
override func viewDidLoad() {
super.viewDidLoad()
println("inside the game class")
gameDetailsVC.delegate = self
}
func slideGameView(){
println("this is from the root controller")
}
}
Существует не segue. У меня есть контроллер представления и внутри, что у меня есть два контроллера контейнера. Я хочу, чтобы контроллер корневого представления мог перемещать 2 вида контейнера, поэтому я думаю, что когда я нажимаю кнопку в контроллере контейнера 1, я могу использовать протокол и слушать это нажатие в корневом контроллере, а затем иметь корень контроллер делает эту анимацию контроллеров контейнеров. – icekomo
Тогда вам придется подключить его, когда вы представите два подзаголовка. Проблема по-прежнему заключается в том, что экземпляр, который вы объявляете во втором контроллере представления, не является экземпляром, который в настоящее время отображается. Таким образом, корневой контейнер, когда он представляет собой обработчики subview (тем не менее), должен передать делегат в этой точке на подпрограммы. Имеют смысл? – Tim