我编辑了我的问题,因为设置文本字段可能不简单,需要引用所以这是我的代码,但仍有问题:
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:对不起,我完全编辑了我的问题,因为很多答案说不能像那样设置文本字段
答案 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()
然后尝试做点什么。