2016-08-29 2 views
1

Я новичок в разработке iOS в swift 3, и я столкнулся с некоторыми проблемами. Как на картинке ниже у меня есть 2 UITableViewControllers с текстовым полем в первом. Два tableViews связаны с tabbarController. И я бы хотел восстановить содержимое текстового поля, чтобы использовать его во второмTableViewController. Я не знаю, как это сделать, самые распространенные учебники по передаче данных объясняют действием кнопки, но я бы хотел восстановить просто данные при изменении tableView, если это возможно.Как передать содержимое UITextField другому UITableViewController, связанному с UITabbarController

Надеюсь, я был в моем вопросе.

Вот в моем первом UITableViewController:

class InvestmentTableViewController: UITableViewController, UITabBarControllerDelegate 

var someVariable: Float? 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    self.tabBarController?.delegate = self 
} 

    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UITableViewController) -> Bool 
{ 

    let selectedVC:ExtraChargesTableViewController = viewController as! ExtraChargesTableViewController 
    selectedVC.totalInvest = self.someVariable 

    return true 

} 

в моем другом TabView

class ExtraChargesTableViewController: UITableViewController 
{ 

var totalInvest: Float? 

Я не знаю, как решить эту проблему. enter image description here

ответ

1

Предположим, у вас есть проект на основе табулатуры, где есть два контроллера управления FirstVC и SecondVC. В firstVC у вас есть textField, и вы хотите, чтобы textFiled использовался в SecondVC. Вы можете передать текстовые поля в методе делегата shouldSelectViewController. Так вот FirstVC должен выглядеть

class FirstViewController: UIViewController,UITabBarControllerDelegate { 

    @IBOutlet weak var txtFldFirst: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     self.tabBarController?.delegate = self; 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool 
    { 
     NSLog("view controller descriptionn should select = %@", viewController.description); 
     let selectedVC:SecondViewController = viewController as! SecondViewController 
     selectedVC.txtFld = self.txtFldFirst 


     return true; 
    } 

И SecondVC должен выглядеть следующим образом

class SecondViewController: UIViewController { 

    var txtFld : UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     NSLog("text fld = %@", txtFld.text); 
    } 

выход будет текст TextField, присутствующего в FirstVC.

Для UITableViewController, следовать тем же путем

import UIKit 

class FirstTableViewController: UITableViewController,UITabBarControllerDelegate { 

    var txtFldFirst:UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Uncomment the following line to preserve selection between presentations 
     // self.clearsSelectionOnViewWillAppear = false 

     // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
     // self.navigationItem.rightBarButtonItem = self.editButtonItem() 

     txtFldFirst = UITextField(frame: CGRectMake(20, 100, 150, 30)); 
     txtFldFirst.text = "Hello World" 
     self.view.addSubview(txtFldFirst); 

     self.tabBarController?.delegate = self; 
    } 


    func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool 
    { 
     NSLog("view controller descriptionn should select = %@", viewController.description); 
     let selectedVC:SecondTableViewController = viewController as! SecondTableViewController 
     selectedVC.txtFld = self.txtFldFirst 


     return true; 
    } 

Второй tableVC

import UIKit 

class SecondTableViewController: UITableViewController { 

    var txtFld:UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Uncomment the following line to preserve selection between presentations 
     // self.clearsSelectionOnViewWillAppear = false 

     // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
     // self.navigationItem.rightBarButtonItem = self.editButtonItem() 


     NSLog("text fld text = %@", self.txtFld.text); 
    } 

Счастливый кодирования ...

+0

большое спасибо! –

+0

Я протестировал вашу реализацию, и я не могу восстановить свою ценность. Это потому, что моя цель - UITableViewController? или я сделал что-то неправильно, я попытался набросить его, но он разбился, и когда я модифицировал голову метода, компилятор сказал мне, что метод Instance «tabBarController (_: shouldSelect :)» почти соответствует необязательному требованию 'tabBarController (_: shouldSelect :)' of protocol 'UITabBarControllerDelegate' –

+0

Я тестировал его, беря два tableVC, он работает. Если вы столкнулись с проблемой, пожалуйста, дайте мне знать. Процедура такая же. – Janmenjaya

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