从另一个viewcontroller设置值textfield

时间:2015-06-18 06:46:52

标签: ios swift textfield

我编辑了我的问题,因为设置文本字段可能不简单,需要引用所以这是我的代码,但仍有问题:

TableViewController的这段代码:

import UIKit

protocol PaymentSelectionDelegate{
func userDidSelectPayment(title: NSString?)
}

class PopPaymentTableViewController: UITableViewController {

    var delegate : PaymentSelectionDelegate!

    override func viewDidLoad() {
        super.viewDidLoad()

    }   

   override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath?) {

    self.dismissViewControllerAnimated(true){
        if self.delegate != nil{
            if let ip = indexPath{
                var payItem : PayMethod

                payItem = self.myList[ip.row] as! PayMethod

                var title = payItem.paymentName

               self.delegate.userDidSelectPayment(title)
               }
           }
       }
   }


}

和代码TransactionViewController:

 import UIKit

 class TransactionViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, PaymentSelectionDelegate, UITextFieldDelegate, UIPopoverPresentationControllerDelegate{

 @IBOutlet var paymentTextField: UITextField!

 override func viewDidLoad() {
    super.viewDidLoad()
 }


    func resign(){

        paymentTextField.resignFirstResponder()
   } 

  func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
       if (textField == paymentTextField){
        resign()

        performSegueWithIdentifier("seguePayment", sender: self)
       }
  }

  func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
    return .None
  }


  func userDidSelectPayment(title: NSString?) {
    paymentTextField.text = title as! String
  }

  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "seguePayment"{

        var VC = segue.destinationViewController as! UINavigationController

        var controller  = VC.popoverPresentationController

        if controller != nil{
            controller?.delegate = self

            var paymentVC = PopPaymentTableViewController()
            paymentVC.delegate = self
        }
    }

}


}

这个问题是:TableViewController中的变量委托似乎总是为零,所以不能设置值

NB:对不起,我完全编辑了我的问题,因为很多答案说不能像那样设置文本字段

3 个答案:

答案 0 :(得分:0)

您的TransactionViewController所在的上下文并不完全清楚,但您正在实例化一个新的ViewController。如果要引用现有的ViewController,这不是您在此处使用的实例。如果要创建一个新的并在didSelectRowAtIndexPath之后显示它,则必须确保TextField在ViewController的init-Method中实例化。由于您没有从Storyboard实例化它,似乎您的TransactionViewController是以编程方式创建的。您可能只在viewDidLoad或init()之后的其他内容中设置TextField。

答案 1 :(得分:0)

您正尝试将text设置为paymentTextField,但仍未初始化。

为此,您必须在text的{​​{1}}方法中将paymentTextField设置为viewDidLoad

TransactionViewController

中删除transVC.paymentTextField.text = title

将其添加到didSelectRowAtIndexPath' TransactionViewController

viewDidLoad

答案 2 :(得分:0)

这样做并不正确。您尚未初始化文本字段并尝试设置其文本。首先初始化文本字段:

transVC.paymentTextField = UITextField()

然后尝试做点什么。