2016-12-15 2 views
-1

Прежде чем отмечать этот вопрос как дубликат, я хочу знать, почему мой код не работает, а не отправлять другому работающему.Отправьте строку с viewController на другую

Я новичок в swift, и я хотел бы отправить переменную «um_words» (которая рассчитывается при нажатии кнопки) из viewController при нажатии одной и той же кнопки, сохраните эту переменную в secondViewController и покажите ее в textView. Для этого я попытался со многими изменениями этого кода, который не дает никаких ошибок в консоли, но не показывает значение переменной на TextView:

1 VC

import UIKit 
import Foundation 

class TransViewController: UIViewController { 

@IBOutlet var trad_text: UITextView! 
@IBOutlet var buttonTrad: UIButton! 
@IBOutlet var labelsitoh: UILabel! 

var num_words = 0 

@IBAction func butCalc(_ sender: UIButton) { 

    let text = trad_text.text 

    num_words = (text?.components(separatedBy: " ").count)!-1 

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

     var DestViewController : PaymentViewController = segue.destination as! PaymentViewController 

     DestViewController.num_words = String(num_words) 
    } 

} 


override func viewDidLoad() { 
    super.viewDidLoad() 

    trad_text!.layer.borderWidth = 1 
    trad_text!.layer.cornerRadius = 20 
    trad_text!.layer.borderColor = UIColor(red:0.22, green:0.26, blue:0.39, alpha:1.0).cgColor 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 

} 

} 

2 VC

import UIKit 
import Foundation 

class PaymentViewController: UIViewController { 

@IBOutlet var labelImport: UITextView! 

var num_words = String() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    labelImport.text = num_words 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

} 

у меня есть абы гипотеза о том, почему он не работает: функция «подготовка» не вызывается; он переходит только к следующему VC при нажатии кнопки ...

Спасибо за ваше время.

+0

Не видя ничего в приготовленииForSegue. Прочитайте (здесь и везде) о том, как это делается. Пожалуйста, сделайте свою домашнюю работу. – dfd

+0

Ваша функция подготовки находится внутри другой функции, поэтому она не вызывается. – dan

+0

Моя функция находится внутри функции, которая должна вызываться при нажатии кнопки. Это не работает, если я так делаю? – alberzyzz

ответ

1

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

@IBAction func butCalc(_ sender: UIButton) { 

    let text = trad_text.text 

    num_words = (text?.components(separatedBy: " ").count)!-1 

} 

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

    var DestViewController : PaymentViewController = segue.destination as! PaymentViewController 

    DestViewController.num_words = String(num_words) 

} 
+0

Проблема в том, что я должен используйте одну и ту же кнопку для выполнения двух функций. Мне нужно сделать сначала фонд butCalc, а затем подготовить, и то, как вы закодировали, он будет делать только подготовку, не так ли? – alberzyzz

+0

Пожалуйста, попробуйте мой ответ, надеюсь, что он сработает :) –

+0

Благодарим за помощь. В вашем ответе отображается значение переменной «0». Это должно быть для глобальной переменной, которую я создал, но если я удалю ее, появится ошибка «использование неразрешенного идентификатора« num_words »» – alberzyzz

1

См:

IBAction func butCalc(_ sender: UIButton) { 
    let text = trad_text.text 
    num_words = (text?.components(separatedBy: " ").count)!-1 
    self.performSegue(withIdentifier: "yourSegueIdentifier", sender: self) 
} 

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 
    if (segue.identifier == "yourSegueIdentifier") { 
     var destViewController : PaymentViewController = segue.destination as! PaymentViewController 
     destViewController.num_words = String(num_words) 
    } 
} 

Вы должны создать функцию в другую функцию ... Пожалуйста, попробуйте это.

PS: Я не проверял этот код

+0

Благодарим за помощь. Я пробовал свой код и для меня это кажется правильным, но второй viewController ничего не показывает на экране – alberzyzz

+0

Это еще одна проблема, о которой вы не говорили! Если он решит ваши проблемы, то ответьте как решение! Рад помочь вам –

+0

Ну, я хотел сказать, что textView не показывает значение переменной – alberzyzz

Смежные вопросы