ios - 如何从不同的函数调用 TextField
问题描述
我是 swift 新手,我一直在做我的第一个项目。我想知道如何在单独的 @objc func 中调用我从 func viewDidLoad 声明的 textField。当我点击一个按钮时,我想加载一个 mailComposeDelegate,但为了做到这一点,我需要声明 2 个不在同一个函数中的文本字段。我怎样才能做到这一点?
func foo() {
//MARK: SubjectTextField
let subjectTextField = UITextField(frame: CGRect(x: 50, y: 10, width: view2.frame.size.width - 100, height: 30))
subjectTextField.placeholder = "Subject"
subjectTextField.borderStyle = .none
subjectTextField.backgroundColor = .clear
subjectTextField.textColor = #colorLiteral(red: 0.2517931461, green: 0.2469081879, blue: 0.2469479442, alpha: 1)
subjectTextField.font = UIFont.init(name: "HelveticaNeue-Bold", size: 20)
subjectTextField.resignFirstResponder()
view2.addSubview(subjectTextField)
//MARK: Email Text Field
let emailTextField = UITextField(frame: CGRect(x: 50, y: 40, width: view2.frame.size.width - 100, height: 30))
emailTextField.placeholder = "Email"
emailTextField.borderStyle = .none
emailTextField.backgroundColor = .clear
emailTextField.textColor = #colorLiteral(red: 0.2517931461, green: 0.2469081879, blue: 0.2469479442, alpha: 1)
emailTextField.font = UIFont.init(name: "HelveticaNeue-Thin", size: 16)
view2.addSubview(emailTextField)
//MARK: Scrollable Text View
let scrollTextView = UITextView(frame: CGRect(x: 70, y: 70, width: view2.frame.size.width - 100, height: 100))
scrollTextView.textColor = #colorLiteral(red: 0.4352585971, green: 0.4353140593, blue: 0.4352396429, alpha: 1)
scrollTextView.text = "Enter Your Message Here"
scrollTextView.font = UIFont.init(name: "HelveticaNeue-Thin", size: 14)
view2.addSubview(scrollTextView)
//MARK: Create Mail Send Button
let sendMailButton = UIButton(frame: CGRect(x: 110, y: 600, width: view2.frame.size.width - 200, height: 50))
sendMailButton.setTitle("SEND", for: .normal)
sendMailButton.backgroundColor = .black
sendMailButton.setTitleColor(.white, for: .normal)
sendMailButton.titleLabel?.font = UIFont(name: "HelveticaNeue-Bold", size: 20)
sendMailButton.layer.cornerRadius = 5
sendMailButton.addTarget(self, action: #selector(sendMail), for: .touchUpInside)
mainScrollView.addSubview(sendMailButton)
}
@objc func sendMail(_ button: UIButton) {
// MARK: Email Sender
print("Works")
let toDestination = ["contact@vaidusi.com"]
let mc: MFMailComposeViewController = MFMailComposeViewController()
mc.mailComposeDelegate = self
mc.setToRecipients(toDestination)
mc.setSubject(subjectTextField.text!)
mc.setMessageBody("Subject: \(subjectTextField.text!) \n\nEmail:\(emailTextField.text!) \n\nMessage: \(scrollTextView.text!)" , isHTML: false)
self.present(mc, animated: true, completion: nil)
}
解决方案
恭喜您使用 Swift。您会发现您可能会喜欢 Swift,尤其是在为 Apple 应用程序编码时,因为它非常棒、简单且安全!
作为对@Adhith 回答的进一步澄清。
您的代码片段不包括整个类,在这种情况下是相关的。
如果您希望 UITextField 可以访问多个函数,则必须在包含这些函数的类级别声明它。然后,您将在某处定义/实例化变量,例如 viewDidLoad()。
class someClass {
var textField: UITextField?
override func viewDidLoad() {
textField = UITextField(frame: CGRect(x: 50, y: 40, width: view2.frame.size.width - 100, height: 30))
}
func anyFunction() {
// you can access your textfield in any function
// just make sure that any function that calls it, does so after the
// variable has been instantiated and/or make the variable optional
// to keep the code safe
}
}
您似乎没有使用情节提要(IB - Interface Builder)。如果您选择移动到该路线,则需要在情节提要和代码之间创建一个“连接器”,这非常简单,并且会自动为您声明变量。
我没有看到您的 UIView 有任何布局限制,这可能会导致您的应用出现各种布局问题。
干杯!
推荐阅读
- r - 如何分解不规则的时间序列?
- javascript - 使用apache poi从excel中读取第二行
- python - 如何修复看似随机出现的 Pyrogram 520 未知错误异常?
- css - NPM Gulp > 检索 SCSS 导入文件路径
- python-3.x - while循环的目的
- javascript - 我正在尝试实现文件下载,但所有下载的文件都已损坏(图像)或空(pdf)
- spring-boot - 是否可以在 Spring Boot 项目中配置 Amazon Keyspaces?
- asp.net-mvc - 调整主页面foreach中的ajax部分视图项
- html - 在 HTML 画布中呈现的图像可实现的最大更新率?
- powershell - Remove-Item (和 [System.IO.File]::Delete() )删除正在使用的文件