Swift 3.0标签空白(零值?)

问题描述 投票:0回答:3

我是一个非常新的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()
    }


}

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

ios swift xcode segue labels
3个回答
1
投票

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

此外,您需要实际执行segue。你现在有prepareForSegue的地方,加上performSegue(withIdentifier: "mySegueID", sender: nil)。请注意,mySegueID是您在故事板中创建的segue的名称。你现在拥有它与按钮动作相同,可能就是这种情况,但你应该把它称为其他东西。

此外,为了使您的代码在未来更具可读性并避免因错误而烦恼,Swift的标准是制作变量名称(TitleTxtCountryTxt)和函数名称(SaveEventBtn)骆驼案例(titleTextFieldcountryTextFieldsaveTapped)。


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的新手,请习惯命名约定,函数和变量名称以小写字母开头。


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!
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.