2016-09-01 10 views
1

初心者のコーダーと私は立ち往生しています。私は2 UITextField私のViewController上に私がUITableViewに渡したい場合は、 "保存"がタップされている。私は両方のtextFieldsをdelegate.selfに設定しました。問題は、テキストフィールドに入力されたデータがUItextFieldsの1つを削除した場合にのみUITableViewに表示されることです。複数のUItextFieldsを管理する

私は、同じVC上で2つ(またはそれ以上)のUITextFieldを使用するために、それらを区別するためのアウトレット以外の方法が必要であると考えています。私はタグについての反応を見ましたが、私は理解しません。

import UIKit 

class BudgetViewController: UIViewController, UITextFieldDelegate, UINavigationControllerDelegate { 

    // Properties: 
    @IBOutlet weak var datePicker: UIDatePicker! 
    @IBOutlet weak var nameTextField: UITextField! 
    @IBOutlet weak var amountTextField: UITextField! 
    @IBOutlet weak var dateDisplay: UILabel! 
    @IBOutlet weak var saveButton: UIBarButtonItem! 


    var budget: Budget? 

    // Date picker: 
    let dateFormatter = NSDateFormatter() 

    func setDate() { 
     dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle 
     dateDisplay.text = dateFormatter.stringFromDate(datePicker.date) 
    } 

    // Navigation 

    // This method lets you configure a view controller before it's presented 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if saveButton === sender { 

      let name = nameTextField.text ?? "" 
      let date = dateDisplay.text ?? "" 
      let amount = amountTextField.text ?? "" 

    // set the budget to be passed to the Controller, this code configures the meal prperty with the appropriate values before the segue executes 

      budget = Budget(date: date, name: name, amount: amount)  
     } 
    } 

    // Actions: 
    @IBAction func datePickerChanger(sender: AnyObject) { 
     setDate() 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Handle the text field 

     nameTextField.delegate = self 
     amountTextField.delegate = self 
    } 
    // UITextFieldDelegate 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     textField.resignFirstResponder() 
     return true 
    } 
    func textFieldDidEndEditing(textField: UITextField) { 


    } 
} 




import UIKit 

class BudgetTableViewController: UITableViewController { 

    //Properties 
    var budgets = [Budget]() 


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

    } 

    func loadSampleBudgets() { 

     let budget1 = Budget(date: "8/16/2016", name: "Eyebrows", amount: "15")! 
     let budget2 = Budget(date: "8/28/2016", name: "Acme", amount: "59")! 
     let budget3 = Budget(date: "9/10/2016", name: "Wildwood", amount: "199")! 

     budgets += [budget1, budget2, budget3] 
    } 
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    // MARK: - Table view data source 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     // #warning Incomplete implementation, return the number of sections 
     return 1 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     return budgets.count 
    } 


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cellIdentifier = "BudgetTableViewCell" 

     let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier,  forIndexPath: indexPath) as! BudgetTableViewCell 
     let budget = budgets[indexPath.row] 

     cell.dateLabel.text = budget.date 
     cell.nameLabel.text = budget.name 
     cell.amountLabel.text = budget.amount 
     return cell 
    } 

@IBAction func unwindToMealList(sender: UIStoryboardSegue) { 
if let sourceViewController = sender.sourceViewController as? BudgetViewController, budget = sourceViewController.budget { 

//Add a new meal 

    let newIndexPath = NSIndexPath(forRow: budgets.count, inSection: 0) 
    budgets.append(budget) 
    tableView.insertRowsAtIndexPaths([indexPath], withRowanimation: .Bottom) 
     } 
    } 
+1

問題の内容を少し説明してください。 2番目のテキストフィールドを送信すると、どのように動作しませんか?それはクラッシュですか?それは空の文字列を送信していますか? – boidkan

+0

私のストーリーボードには2つのテキストフィールドと保存ボタンがあります。書かれているように、アプリケーションはどちらのテキストフィールドにも入力されたデータをテーブルビューに追加しません。しかし、一度すべてのコンポーネントを削除すると動作します。だから私はあなたが何らかの順序や優先順位を割り当てることなく、同じビューコントローラのデリゲートとして複数のテキストフィールドを割り当てることができないと仮定しています。 @boidkan –

+0

そして、私はどちらかを削除することができますtextFieldと残りのテキストフィールドに入力されたものは、tableviewに渡す、ちょうど私が紛失しているものがない2つのテキストフィールドにすることはできません。 @boidkan –

答えて

0

テキストフィールドアウトレットがストーリーボードに適切にリンクされているかどうかを確認してください。各IBOutletの横に黒丸が表示されます。コードとストーリーボードの両方をXCodeで開き、各コンセントの隣の円の上にマウスを置くと、テキストフィールドがストーリーボード上で強調表示されます。

元の名前のテキストフィールドをコピーして貼り付け、量テキストフィールドに変更した場合、実際にはまだ名前のアウトレットへの参照がある可能性があります。ストーリーボードのテキストフィールドを右クリックし、それがどのコンセントを参照しているかを確認することでこれを確認できます。

override func viewDidLoad() { 
    super.viewDidLoad() 

     nameTextField.delegate = self 
     streetTextField.delegate = self 
     cityTextField.delegate = self 
     stateTextField.delegate = self 
     countryTextField.delegate = self 
     phoneTextField.delegate = self 
    } 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     if textField == nameTextField { 
      streetTextField.becomeFirstResponder() 
     } 
     else if textField == streetTextField { 
      cityTextField.becomeFirstResponder() 
     } 
     else if textField == cityTextField { 
      stateTextField.becomeFirstResponder() 
     } 
     else if textField == stateTextField { 
      countryTextField.becomeFirstResponder() 
     } 
     else if textField == countryTextField { 
      phoneTextField.becomeFirstResponder() 
     } 
     else if textField == phoneTextField { 
      nameTextField.becomeFirstResponder() 
     } 
     return true 
    } 

これは私が(と次のフィールドから移動するためにリターンを押す)ユーザーがフォームに記入できるようにするために書いたので、あなたは間違いなく同じデリゲートを持つ複数のテキストフィールドを持つことができますいくつかのコードです。

+0

アウトレットが正しい限り、すべてのものはありません。関数が正しく機能し、テキストフィールドとそのすべての記述の1つを削除する限り、データはtableViewに保存されます。私は、textFieldsに順序または優先順位を付けることを前提としています。私はリンゴの文書でこれを読んでいましたが、それをどのように組み込むのか分かりませんでした。 @百万のアプリで@One –

関連する問題