我是一个非常新的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()
}
}
我确信我错过了一些非常简单的东西,但任何帮助都会受到赞赏。干杯!
答案 0 :(得分:1)
您的prepareForSegue
函数嵌套在另一个函数中。它需要达到班级的水平。将其移至SaveEventBtn
之外。
此外,您需要实际执行segue。如果您目前有prepareForSegue
,请添加performSegue(withIdentifier: "mySegueID", sender: nil)
。请注意,mySegueID
是您在故事板中创建的segue的名称。你现在和按钮动作一样,可能就是这种情况,但是你应该把它称之为其他动作。
此外,为了使您的代码在未来更具可读性并避免因错误而头疼,Swift的标准是创建变量名称(TitleTxt
,CountryTxt
)和函数名称({ {1}})骆驼案(SaveEventBtn
,titleTextField
,countryTextField
)。
答案 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的新手,请习惯命名约定,函数和变量名称以小写字母开头。