2016-09-01 2 views
0

Ugh bitte helfen .... Ich bin neu in Swift (Codierung im Allgemeinen), aber ich habe diesen gleichen Code verwendet, um eine frühere App, die eine VC mit 1 Textfeld hatte , eine Bewertungskontrolle und ein Bild und hat gut funktioniert. Diese Version hat zwei Textfelder und eine Datumsauswahl, aber nur die Beispieldaten werden in der Tabelle angezeigt, wenn Sie versuchen, ein neues Element hinzuzufügen.Konnte nicht neue Artikel in Tabelle speichern

Klicken Sie auf die Schaltfläche +, um zur nächsten Seite zu gelangen, auf der Sie neue Informationen hinzufügen können (siehe unten). Wenn Sie speichern, werden die neuen Informationen in der Tabellenansicht angezeigt.

enter image description here

Import UIKit

Klasse 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. 
} 

// 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) 
    } 
} 

zweite VC brechen

Import UIKit

Klasse 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) { 


} 

}

+0

könnten Sie bitte verstehen sie etwas mehr zu Screenshot entsprechend und erklären aktualisieren, bei denen Artikel –

+0

Sie nicht hinzugefügt müssen Sie nach dem Hinzufügen neuer Daten zu seiner DataSourceData() in Ihrem TableView neu laden, oder habe ich es gerade nicht gesehen? :-) –

+0

Könnten Sie Ihr Projekt auf GIT hochladen, oder senden Sie es mir per E-Mail? –

Antwort

0

Sie sollten nach dem Hinzufügen neuer Daten zu Budgets für Update Tabellenansicht insertRowsAtIndexPaths:withRowAnimation oder reloadData Methode aufrufen (Tabelle Datenquelle Ansicht)

+0

Danke @GarveyCalvin, also habe ich insertRowsAtIndexPaths hinzugefügt, aber es funktionierte immer noch nicht. Ich erkannte, dass es 2 Textfelder als Delegierten zugewiesen hat. Sobald ich einen (und alle Eigenschaften) gelöscht habe, funktionierte es. Aber ich brauche 2 (wirklich 3) ... wie benutzt man mehr als 1 Textfeld im selben Viewcontroller? –

+0

Nun, ich glaube nicht, dass Sie das Delegiertenmuster so verstanden haben, wie es verwendet werden sollte ... Wenn Sie es verstehen, wird es Ihnen helfen, eine Menge Dinge zu verstehen ... wenn Sie weitere Fragen haben [email protected] .de –