首页 > 解决方案 > 如何从不同的函数调用 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)
         
     }

标签: iosswiftxcodeuikit

解决方案


恭喜您使用 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 有任何布局限制,这可能会导致您的应用出现各种布局问题。

干杯!


推荐阅读