Я представляю учебник 4 UIViewController, когда мое приложение запускается в первый раз. У каждого UIViewController есть кнопка с segue, представляющая следующий ViewController. Последний ViewController имеет кнопку «Давайте начнем», которая должна полностью убрать учебник.Использование rejectViewController в очереди нескольких UIViewControllers с делегатом
Задача: Это отклоняет все ViewControllers, кроме первого. Я не понимаю, почему ?!
Что я ожидаю:
На последнем ViewController4 я звоню функцию dismissIntroduction() первого ViewController, так что я, кроме ВСЕХ ViewControllers (ViewController1 включены) должны исчезнуть. Когда я нажимаю кнопку на первом ViewController и вызываю функцию "rejectIntroduction()", она исчезает.
ViewController 1 (WelcomeViewController):
protocol WelcomeViewDelegate {
func dismissIntroduction()
}
class WelcomeViewController: UIViewController, WelcomeViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
func dismissIntroduction() {
self.dismissViewControllerAnimated(true, completion: nil)
}
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destination = segue.destinationViewController as! ViewController2
destination.delegate = self
}
}
ViewController 2:
class ViewController2: UIViewController {
var delegate:WelcomeViewDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destination = segue.destinationViewController as! ViewController3
destination.delegate = self.delegate
}
}
ViewController 3:
class ViewController3: UIViewController {
var delegate:WelcomeViewDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destination = segue.destinationViewController as! ViewController4
destination.delegate = self.delegate
}
}
ViewController4 (последний):
class ViewController4: UIViewController {
var delegate:WelcomeViewDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func pressLetsStart(sender: AnyObject) {
self.delegate!.dismissIntroduction()
}
}
EDIT: Я получил это работает, когда я ставлю функция dismissViewControllerAnimated два раза !?
func dismissIntroduction() {
self.dismissViewControllerAnimated(true, completion: nil)
self.dismissViewControllerAnimated(true, completion: nil)
}
Но почему? Я не понимаю логики ...
Пробовали ли вы имея это все четыре контроллера в навигационном контроллере и настоящий NavController из скажем PPViewContoller? – mkumar
Я не хочу помещать его в контроллер навигации (из-за навигационной панели). –
вы всегда можете скрыть навигационную панель, как в http://stackoverflow.com/questions/2926914/navigation-bar-show-hide, делая по-яблочному пути (контроллер навигации) - это лучший подход, чем использование многих ошибок или служебной кобылы в долгосрочной перспективе .. – mkumar