Swift 3.0标签空白(零值?)

时间:2018-01-03 20:19:35

标签: ios swift xcode segue labels

我是一个非常新的Swift,我正在尝试制作一个应用程序,允许用户将事件信息输入到文本字段中,然后当他们按下按钮时,信息显示在单独视图中的标签中。但是,我目前遇到一个问题,当我点击模拟器中的按钮,在每个字段中输入信息时,我只是得到一个完全空白的视图,而不是显示信息的标签。

以下是输入信息的控制器的代码:

import UIKit

class CreateEventController: UIViewController {

    @IBOutlet weak var TitleTxt: UITextField!
    @IBOutlet weak var CityTxt: UITextField!
    @IBOutlet weak var CountryTxt: UITextField!
    @IBOutlet weak var VenueTxt: UITextField!
    @IBOutlet weak var TimeTxt: UITextField!
    @IBOutlet weak var UrlTxt: UITextField!

    @IBAction func SaveEventBtn(_ sender: UIButton) {

        if TitleTxt.text!.isEmpty || CityTxt.text!.isEmpty || 
    CountryTxt.text!.isEmpty || VenueTxt.text!.isEmpty ||
        TimeTxt.text!.isEmpty || UrlTxt.text!.isEmpty{

            let alert = UIAlertController(title: "Missing values", message: "Please populate all fields", preferredStyle: UIAlertControllerStyle.alert)

            alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))

            self.present(alert, animated: true, completion: nil)

        }

        else {

            print("The event title is \((TitleTxt.text)!)")

            func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) 
            {
                if (segue.identifier == "CreateEvntBtn") {
                    let destVC = segue.destination as! CreatedEventController

                    destVC.CrTitle = TitleTxt.text!
                    destVC.CrCity = CityTxt.text!
                    destVC.CrCountry = CountryTxt.text!
                    destVC.CrVenue = VenueTxt.text!
                    destVC.CrTime = TimeTxt.text!
                    destVC.CrUrl = UrlTxt.text!

                }
            }

        }

    }

}

以下是应该显示信息的视图控制器:

import UIKit

class CreatedEventController: UIViewController {


    @IBOutlet weak var CrTitleLbl: UILabel!
    @IBOutlet weak var CrCityLbl: UILabel!
    @IBOutlet weak var CrCountryLbl: UILabel!
    @IBOutlet weak var CrVenueLbl: UILabel!
    @IBOutlet weak var CrTimeLbl: UILabel!
    @IBOutlet weak var CrUrlLbl: UILabel!

    var CrTitle, CrCity, CrCountry, CrVenue, CrTime, CrUrl : String!

    override func viewDidLoad() {
        super.viewDidLoad()

        CrTitleLbl.text = CrTitle
        CrCityLbl.text = CrCity
        CrCountryLbl.text = CrCountry
        CrVenueLbl.text = CrVenue
        CrTimeLbl.text = CrTime
        CrUrlLbl.text = CrUrl
    }

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


}

我确信我错过了一些非常简单的东西,但任何帮助都会受到赞赏。干杯!

3 个答案:

答案 0 :(得分:1)

您的prepareForSegue函数嵌套在另一个函数中。它需要达到班级的水平。将其移至SaveEventBtn之外。

此外,您需要实际执行segue。如果您目前有prepareForSegue,请添加performSegue(withIdentifier: "mySegueID", sender: nil)。请注意,mySegueID是您在故事板中创建的segue的名称。你现在和按钮动作一样,可能就是这种情况,但是你应该把它称之为其他动作。

此外,为了使您的代码在未来更具可读性并避免因错误而头疼,Swift的标准是创建变量名称(TitleTxtCountryTxt)和函数名称({ {1}})骆驼案(SaveEventBtntitleTextFieldcountryTextField)。

答案 1 :(得分:1)

首先,您要覆盖prepare(for:sender:),而不是创建嵌套的performSegue。其次,您要拨打import UIKit class CreateEventController: UIViewController { @IBOutlet weak var TitleTxt: UITextField! @IBOutlet weak var CityTxt: UITextField! @IBOutlet weak var CountryTxt: UITextField! @IBOutlet weak var VenueTxt: UITextField! @IBOutlet weak var TimeTxt: UITextField! @IBOutlet weak var UrlTxt: UITextField! @IBAction func SaveEventBtn(_ sender: UIButton) { if TitleTxt.text!.isEmpty || CityTxt.text!.isEmpty || CountryTxt.text!.isEmpty || VenueTxt.text!.isEmpty || TimeTxt.text!.isEmpty || UrlTxt.text!.isEmpty { let alert = UIAlertController(title: "Missing values", message: "Please populate all fields", preferredStyle: UIAlertControllerStyle.alert) alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)) self.present(alert, animated: true, completion: nil) } else { print("The event title is \((TitleTxt.text)!)") // this will perform the segue (of course the segue with the given identifier must exist) self.performSegue(withIdentifier: "CreateEvntBtn", sender: self) } } // this will give you the opportunity to configure your destination VC override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if (segue.identifier == "CreateEvntBtn") { let destVC = segue.destination as! CreatedEventController destVC.CrTitle = TitleTxt.text! destVC.CrCity = CityTxt.text! destVC.CrCountry = CountryTxt.text! destVC.CrVenue = VenueTxt.text! destVC.CrTime = TimeTxt.text! destVC.CrUrl = UrlTxt.text! } } } ,这将启动导航:

{{1}}

答案 2 :(得分:1)

三个问题:

  • prepareForSegue必须位于班级的顶层,而不是其他方法。
  • prepareForSegue的签名是错误的。这是

    func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    
  • IBAction中,您必须致电performSegue(withIdentifier:sender)

    else {
        print("The event title is \((TitleTxt.text)!)")
        performSegue(withIdentifier:"CreateEvntBtn", sender:nil)
    }
    

如果您是Swift的新手,请习惯命名约定,函数和变量名称以小写字母开头。