gpt4 book ai didi

swift - 如何将变量从 ViewController 类传递到其他结构?

转载 作者:行者123 更新时间:2023-11-28 06:12:04 24 4
gpt4 key购买 nike

我不知道如何将数据从类传递到另一个结构。这是我的 ViewController.swift 文件。我还有另一个名为 Meme.swift 的文件,用于保存结构。我试图将结构放在 ViewController.swift 文件和 Meme.swift 文件中,但我无法访问 topTextField.textlowTextField.text 之类的值并将它们用于结构。谁能帮我这个? View Controller :导入 UIKit

类 ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextFieldDelegate { @IBOutlet weak var cameraButton: UIBarButtonItem!

@IBOutlet weak var bottomTextField: UITextField!
@IBOutlet weak var topTextField: UITextField!
@IBOutlet weak var imagePickerView: UIImageView!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var actionButton: UIBarButtonItem!
let bottomTextFieldDelegate = BottomTextFieldDelegate()

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
topTextField.text = "TOP"
bottomTextField.text = "BOTTOM"
topTextField.delegate = self
bottomTextField.delegate = self.bottomTextFieldDelegate

}

func textFieldDidBeginEditing(_ textField: UITextField) {
topTextField.text = ""
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
self.view.endEditing(true)
textField.resignFirstResponder()
actionButton.isEnabled = true
return true
}

@IBAction func shareAction(_ sender: Any) {
let image = generateMemedImage()
let controller = UIActivityViewController(activityItems: [image as Any], applicationActivities: nil)
self.present(controller, animated: true, completion: nil)
controller.completionWithItemsHandler = {(activityType: UIActivityType?, completed:Bool, returnedItems:[Any]?, error: Error?) in

if !completed {
debugPrint("cancelled")
return
}else{
self.save()
self.dismiss(animated: true, completion: nil)
}
}
}


override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
cameraButton.isEnabled = UIImagePickerController.isSourceTypeAvailable(.camera)
configureTextField(textField: topTextField)
configureTextField(textField: bottomTextField)
topTextField.textAlignment = .center
bottomTextField.textAlignment = .center
subscribeToKeyboardNotifications()
actionButton.isEnabled = false

}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
unsubscribeFromKeyboardNotifications()
}

func configureTextField(textField: UITextField) {
textField.defaultTextAttributes = memeTextAttributes
}


func save() -> Meme {
// Create the meme
let memedImage = generateMemedImage()
let meme = Meme(topText: topTextField.text!, bottomText: bottomTextField.text!, originalImage: imageView.image!, memedImage: memedImage)

return meme
}

func generateMemedImage() -> UIImage {

// TODO: Hide toolbar and navbar
navigationController?.setToolbarHidden(true, animated: true)
self.navigationController?.isNavigationBarHidden = true

// Render view to an image
UIGraphicsBeginImageContext(self.view.frame.size)
view.drawHierarchy(in: self.view.frame, afterScreenUpdates: true)
let memedImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()

// TODO: Show toolbar and navbar
navigationController?.setToolbarHidden(false, animated: false)
self.navigationController?.isNavigationBarHidden = false

return memedImage
}


func keyboardWillShow(_ notification:Notification) {

view.frame.origin.y = 0 - getKeyboardHeight(notification)
}

func keyboardWillHide(_ notification:Notification) {

view.frame.origin.y = 0

}

func getKeyboardHeight(_ notification:Notification) -> CGFloat { //getting the height of keyboard and use it for func keyboardWillShow to relocate
//the keyboard using keyboardWillShow function

let userInfo = notification.userInfo
let keyboardSize = userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue // of CGRect
return keyboardSize.cgRectValue.height
}

func subscribeToKeyboardNotifications() { //setting up the obeserver to be notified when keyboard is shown or not, then execute keyboardWillShow function

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: .UIKeyboardWillHide, object: nil)
}

func unsubscribeFromKeyboardNotifications() { //unsubscribe the notification

NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillHide, object: nil)
}
//setting the arributes of the text
let memeTextAttributes:[String:Any] = [
NSStrokeColorAttributeName: UIColor.black,
NSForegroundColorAttributeName: UIColor.white,
NSFontAttributeName: UIFont(name: "HelveticaNeue-CondensedBlack", size: 40)!,
NSStrokeWidthAttributeName: 3,]


@IBAction func pickAnImageFromAlbum(_ sender: Any) {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .photoLibrary
present(imagePicker, animated: true, completion: nil)
}


@IBAction func pickAnImageFromCamera(_ sender: Any) {

let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .camera
present(imagePicker, animated: true, completion: nil)
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
imagePickerView.image = image
imagePickerView.contentMode = .scaleAspectFit
dismiss(animated: true, completion: nil)
}

}

func imagePickerControllerDidCancel(_ picker: UIImagePickerController){
dismiss(animated: true, completion: nil)
}

底部字段委托(delegate):

导入基金会导入 UIKit

类 BottomTextFieldDelegate: NSObject, UITextFieldDelegate {

func textFieldDidBeginEditing(_ textField: UITextField) {
textField.text = ""
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
let viewController = ViewController()
textField.resignFirstResponder()
viewController.view.endEditing(true)
let actionButton = viewController.actionButton
actionButton?.isEnabled = true
return true
}

最佳答案

首先你需要将这个函数像 save() 和 generateMemedImage() 移动到你的 ViewController 类中然后你可以访问 topTextField.text 和 lowTextField.text

像下面这样修改你的结构,不要把 nsobject 放在结构中

struct Meme {
var topText: String
var bottomText: String
var memedImage: UIImage
var originalImage: UIImage

init(topText: String, bottomText: String, originalImage: UIImage, memedImage: UIImage) {
self.topText = topText
self.bottomText = bottomText
self.originalImage = originalImage
self.memedImage = memedImage
}
}

从 Meme 结构中删除 save() 并将该代码放入您的 Viewcontroller 文件中。修改返回 Meme 结构对象的函数。

func save() -> Meme {
// Create the meme
let meme = Meme(topText: topTextField.text!, bottomText: bottomTextField.text!, originalImage: imageView.image!, memedImage: memedImage)
return meme
}

你可以像下面这样存储在数组中。

let array:[Meme] = []
array.append(save())

关于swift - 如何将变量从 ViewController 类传递到其他结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46261667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com