2015-06-18 2 views
2

я редактировал мой вопрос, потому что набор TextField может быть, не может быть простым, нужно ссылки, так что это мой код, но до сих пор вопрос:установленное значение текстовое поле из другого ViewController

этот код для 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

Контекст, где ваш TransactionViewController есть, не совсем понятно, но вы инстанцировании новый ViewController. Если вы хотите обратиться к существующему ViewController, это не тот экземпляр, который вы используете здесь. Если вы хотите создать новый и показать его после вашего didSelectRowAtIndexPath, вы должны убедиться, что TextField создается в init-Method вашего ViewController. Поскольку вы не создаете экземпляр из раскадровки, кажется, что ваш TransactionViewController создан программно. Возможно, вы устанавливаете TextField только в viewDidLoad или что-то еще после init().

+0

paymentTextField уже заявлено в TransactionViewController. этот поток может показаться так: в TransactionViewController есть текстовое поле, которое, если вы нажмете на текстовое поле, отобразит popover tableViewController, и если вы выберете ячейку, значение в ячейке должно быть введено в текстовое поле – fendy

+0

, чем вы должны дать вашему TableViewController ссылку на ваш TransactionViewController и используйте эту ссылку вместо создания нового экземпляра TransactionViewController. – Christian

+0

может быть ссылка на то, что вы подразумеваете под его протоколом? Я уже редактирую, посмотрю. thx – fendy

0

Вы пытаетесь установить text на paymentTextField, который по-прежнему не инициализирован.

Для этого вы должны установить text в paymentTextField в viewDidLoad метод в TransactionViewController.

transVC.paymentTextField.text = title удалить из didSelectRowAtIndexPath

Добавьте его в TransactionViewController «s viewDidLoad

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.paymentTextField.text = self.payName 
} 
+0

да, но эта сцена немного отличается, в TransactionViewController есть текстовое поле, которое, если вы нажмете на в текстовом поле будет отображаться popover tableViewController, и если вы выбрали ячейку, значение в ячейке будет введено в текстовое поле, поэтому я не могу использовать в ViewDidLoad, возможно, – fendy

+0

@fendy, это не будет иметь никакого значения. – iDhaval

0

Это не правильный способ сделать это. Вы не инициализировали текстовое поле и пытались установить его текст. Первое начальное текстовое поле:

transVC.paymentTextField = UITextField() 

Тогда попытайтесь что-то сделать.

+0

eror, не может присвоить тип значения «UITextField» значению типа «String» – fendy

+0

, который вы пытаетесь присвоить 'transVC.paymentTextField.text = UITextField() ', вы не должны. –

Смежные вопросы