2017-02-07 4 views
0

Я пытаюсь передать текст TextView из других ViewController:передать текст в TextView через Segue

if (segue.identifier == "HomeToDetails") { 
     let nav = segue.destination as! UINavigationController 
     let nextVC = nav.topViewController as! DetailsViewController 
     nextVC.infoTextView.text = "TESTING" 
    } 

Но он выходит из строя:

fatal error: unexpectedly found nil while unwrapping an Optional value

+0

показать отчет об врезаться –

+0

фатальную ошибку: неожиданно нашли ноль в то время как разворачивание необязательное значение – Nitesh

+0

почему у принятых верхней VC, DetailsViewController ваш следующий VC правильно –

ответ

1

установка текст на UITextField из DestinationViewController не представляется возможным в prepareForSegue:sender, так как все компоненты представления о недавно выделенном контроллере не инициализируются перед загрузкой представления (в это время все они ноль), они будут только тогда, когдаЗагружено изображение.

Вы должны использовать дополнительные переменную infoString в DetailsViewController, которые вы можете установить в prepareForSegue методе

if (segue.identifier == "HomeToDetails") { 
     let nav = segue.destination as! UINavigationController 
     let nextVC = nav.topViewController as! DetailsViewController 
     nextVC.infoString = "TESTING" 
} 

в DetailsViewController.swift

class DetailViewController: UIViewController { 

    var infoString: String? 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    if let info = infoString { 
     self.infoTextView.text = info 
    } 
    } 

} 
0

, если значение равно нулю, и вы разворачивать его, то приложение выйдет из строя, вы должны использовать необязательную привязку, чтобы избежать сбоя.

if (segue.identifier == "HomeToDetails") { 
    if let nav = segue.destination as? UINavigationController { //should use optional binding to avoid crash 
     if let nextVC = nav.topViewController as? DetailsViewController { 
      nextVC.infoTextView.text = "TESTING" 
     } 
    } 
} 
0

Проверьте это:

if (segue.identifier == "HomeToDetails") { 

    // get a reference to the second view controller 
    let secondViewController = segue.destination as! DetailsViewController 

    // set a variable in the second view controller with the String to pass 
    secondViewController.infoTextView.text = "TESTING" 
} 
0

Попробуйте этот код:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
      if let nav = segue.destination as? UINavigationController { 
      if let nextVC = nav.topViewController as? DetailsViewController { 
      nextVC.infoTextView.text = "Data you want to pass" 
      } 
     } 
    } 
+0

инициирован 'UIViewController' на данный момент, однако, это 'UIView', и все дочерние представления не являются, поэтому' UITextView' будет nil. –

0

это происходит потому, что, когда вы присваивающее значение в текст представления, текст view not initialized that time as viewDidLoad следующего класса еще не вызывается. Итак, передайте только строку, затем в viewDidLoad следующего класса задайте текст.

0

Вы не можете передать текст непосредственно TextView в другом представлении перед его созданием.

Первый ViewController:

if (segue.identifier == "HomeToDetails") { 
let secondViewController = segue.destination as! DetailsViewController 
secondViewController.myText = "TESTING" 
} 

DetailsViewController:

var myText = "" 
override func viewDidLoad() { 
super.viewDidLoad() 
infoTextView.text = myText 
} 
0

Все компоненты Вид на DetailsViewController не инициализируются перед загрузкой вид. Вы можете загрузить это представление перед назначением значений компонентам этого вида.

Рассмотрите, что vC - это контроллер вида, который содержит представление, которое вы хотите загрузить. Затем

if let _ = vC.view { 

     //Assign value here 
} 

После загрузки представления мы можем установить значение для компонентов в этом представлении. В SWIFT 3

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    if segue.identifier == "HomeToDetails" { 

     let nav = segue.destination as! UINavigationController 
     let nextVC = nav.topViewController as! DetailsViewController 
     if let _ = nextVC.view { 
      nextVC.infoTextView.text = "TESTING" 
     } 
    } 
} 
Смежные вопросы