Выполнение перехода с использованием кода дает черный экран

Я пытаюсь перейти на другой экран с помощью кода, но он показывает мне черный экран с использованием Xcode 7 beta 6. вот мой код файла контроллера 1-го представления

//  ViewController.swift
//  Segue through programming
//

import UIKit

class ViewController: UIViewController{

    @IBAction func buttonPressed(sender: AnyObject) {
        presentViewController(secondController(), animated: true) { () -> Void in

        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

person Community    schedule 30.08.2015    source источник
comment
что такое secondViewController()?   -  person Nikita Took    schedule 30.08.2015
comment
Я предполагаю, что secondController — это имя класса контроллера представления этой целевой сцены. Я бы предложил следовать соглашениям об именах Cocoa и использовать первую букву имени вашего класса с заглавной буквы. По соглашению переменные начинаются со строчных букв, а классы — с прописных.   -  person Rob    schedule 30.08.2015


Ответы (1)


Это будет работать, только если secondController программно создаст свое представление. Если вы хотите использовать сцену раскадровки (что встречается гораздо чаще), вы можете сделать следующее:

@IBAction func buttonPressed(sender: AnyObject) {
    let controller = storyboard?.instantiateViewControllerWithIdentifier("foo")
    presentViewController(controller!, animated: true, completion: nil)
}

Это, очевидно, предполагает, что вы указали идентификатор раскадровки для сцены назначения.

введите здесь описание изображения

Или вы можете создать переход между двумя сценами в IB, перетащив элемент управления со значка контроллера представления в верхней части первой сцены на вторую сцену:

введите здесь описание изображения

а затем дайте этому переходу собственный идентификатор раскадровки:

введите здесь описание изображения

Затем вы можете вызвать переход программно:

@IBAction func buttonPressed(sender: AnyObject) {
    performSegueWithIdentifier("bar", sender: self)
}
person Rob    schedule 30.08.2015
comment
я получил эту ошибку 015-08-30 15:57:36.886 Переход через программирование [5051:6711545] *** Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Раскадровка (‹UIStoryboard: 0x7b6b7ca0›) не содержит контроллер представления с идентификатором 'foo'' - person ; 30.08.2015
comment
@Alexander Александр - Вы дали контроллеру представления вашей целевой сцены идентификатор раскадровки foo? Если нет, измените свой код, чтобы он соответствовал используемому вами идентификатору раскадровки. - person Rob; 30.08.2015
comment
На моем втором контроллере представления, к которому я хочу перейти, есть идентификатор раскадровки foo, но я все еще получаю сообщение об ошибке - person ; 30.08.2015
comment
Дважды проверьте, что идентификатор раскадровки для целевой сцены равен foo (без кавычек, совпадений заглавных букв, пробелов и т. д.). - person Rob; 30.08.2015
comment
Я думаю, что использую Xcode 7 beta 6, поэтому он не работает - person ; 30.08.2015
comment
Нет, он отлично работает в Xcode 6 beta 6. Только что протестировал его, и он работает, как всегда. Там что-то еще происходит, но не видя проекта, трудно сказать. - person Rob; 30.08.2015
comment
вот ссылки код раскадровка - person ; 30.08.2015
comment
Да, я вам верю, но в вашем проекте происходит что-то неочевидное, что мешает. Возможно, создайте пустой проект и попробуйте его там, и вы увидите, что он там работает. Но здесь происходит что-то еще, потому что это проверенная и верная техника, но не очевидно, что идет не так в вашей ситуации. (Например, у вас есть несколько раскадровок? Вы удалили производные данные? Вы выполнили Product - Clean?) Без воспроизводимого примера проблемы я не уверен, что смогу помочь дальше. - person Rob; 30.08.2015