2017-06-02 94 views
1

我试图创建一个简单的放松segue,但显然我犯了一个错误的地方。我想展开的保存按钮会对按下做出反应,但不会退到表格视图。提前致谢,我很感激。放松继续不放开

import UIKit 

class NoteTableViewController: UITableViewController { 

var notes = [Note]() 

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

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

// MARK: - Table view data source 

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

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // #warning Incomplete implementation, return the number of rows 
    return 0 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) 
    return cell 
} 

//ACTION 
@IBAction func unwindToNoteList(sender: UIStoryboardSegue) { 
    if let sourceViewController = sender.source as? ViewController, let noteTaken = sourceViewController.noteTaken { 

     // Add a new meal. 
     let newIndexPath = IndexPath(row: notes.count, section: 0) 

     notes.append(noteTaken) 
     tableView.insertRows(at: [newIndexPath], with: .automatic) 
    } 
} 
} 

和我的视图控制器

import UIKit 
import os.log 

class ViewController: UIViewController, UITextFieldDelegate { 

@IBOutlet weak var typeField: UITextField! 
@IBOutlet weak var textDisplay: UILabel! 
@IBOutlet weak var saveButton: UIBarButtonItem! 

var noteTaken: Note? 

func textFieldDidEndEditing(_ textField: UITextField) { 
    textDisplay.text = typeField.text 
} 

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
    // Hide the keyboard. 
    typeField.resignFirstResponder() 
    return true 
} 

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

//NAV 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    super.prepare(for: segue, sender: sender) 

    // Configure the destination view controller only when the save button is pressed. 
    guard let button = sender as? UIBarButtonItem, button === saveButton else { 
     os_log("The save button was not pressed, cancelling", log: OSLog.default, type: .debug) 
     return 
    } 

    let note = typeField.text ?? "" 

    // Set the meal to be passed to MealTableViewController after the unwind segue. 
    noteTaken = Note(note: note) 
} 

@IBAction func cancelButton(_ sender: UIBarButtonItem) { 
    dismiss(animated: true, completion: nil) 
} 

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

控制单击您的保存按钮,并确保其触发的segue动作连接到'unwindToNoteListWithSender:'。 – vacawama

+0

@Tom请检查一下,这是否有用。 https://stackoverflow.com/questions/41074677/how-to-unwind-to-the-first-view-controller-on-a-navigation-stack/41075029#41075029 – NandhaKumar

+0

另外,不要调用'super.prepare (for:segue,sender:sender)'。这不是必要的(也可能是有害的)。 – vacawama

回答

0

这是我创造我的开卷塞格斯:

  1. 写在第一个视图控制器开卷SEGUE代码:

    @IBAction func unwindSegue(Segue: UIStoryboardSegue) { 
    // Run code when the view loads up 
    } 
    
  2. 创建main.storyboard的SEGUE: Creating the segue

  3. 给这个SEGUE的标识符: Adding an identifier.

  4. 然后调用它的代码:

    @IBAction func UnwindButton(_ sender: UIButton) { 
        performSegue(withIdentifier: "UnwindSegue", sender: UIButton()) 
    } 
    

希望这有助于!

+0

感谢Mikael,但这不适合我。 – Tom