简体   繁体   English

解除模态视图后重新加载表视图

[英]reload table view after modal view dismissal

I've looked at a lot of other questions on this subject. 我已经看过许多关于这个问题的其他问题。 But they all lead to the same thing "view did load" "view did appear" and "view will appear" and Ive put 但是它们都导致相同的结果:“视图已加载”,“视图已出现”和“视图将出现”,艾夫

tableview.reloadData()

in all of them but after dismissal of the modal view it still doesn't reload till I terminate the app and then I run again. 在所有视图中,但是在关闭模式视图后,它仍然不会重新加载,直到我终止应用程序,然后再次运行。 I have seen that you can do this with notification center and have seen that Here and I tried that method but it didn't seem to work for me. 我已经看到您可以在通知中心中执行此操作,并看到在这里和我尝试了该方法,但是它似乎对我不起作用。 Thanks for any Help in advance!!! 感谢您的任何帮助!

import UIKit

class mainScreen: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableview: UITableView!


func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}
// MARK: - Table View Setup
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if allPeople.count == theAssignments.count {
        return allPeople.count
    }else {
        print("else in number of rows in section BAD")
        return allPeople.count
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "PeopleTVCell", for: indexPath)
    cell.textLabel?.text = theAssignments[indexPath.row]
    cell.detailTextLabel?.text = allPeople[indexPath.row]
    return cell
}
// MARK: - System setup
override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view, typically from a nib.
    tableview.allowsSelection = false
    /////////here
    tableview.reloadData()
}
override func viewWillAppear(_ animated: Bool) {
    ////////here
    tableview.reloadData()
}

override func viewDidAppear(_ animated: Bool) {

    let NamesObject = UserDefaults.standard.object(forKey: "Name" + whatGroup)

    if let tempItems = NamesObject as? [String] {

        allPeople = tempItems

        print("saved data in main (Name)")
    }
    let AssignmentObject = UserDefaults.standard.object(forKey: whatGroup + "Assignment")

    if let tempItems = AssignmentObject as? [String] {

        theAssignments = tempItems

        print("saved data in main (Assignments)")
    }
    ////////here
    tableview.reloadData()
}
// MARK: - the Exit Segue
@IBAction func exitSegue(segue: UIStoryboardSegue) {
    /////////here
    tableview.reloadData()
    isAddingName = 2
    print("Exited to main")
}

}

this is where I would add things 这是我要添加东西的地方

@IBAction func saveButton(_ sender: UIButton) {
    if isInMain == true {

        if IsAddingAssignment == true {
// MARK: Add Assignment
            let AssignmentObject = UserDefaults.standard.object(forKey: whatGroup + "Assignment")  as? [String]

            var Assignment: [String]

            if let tempItems = AssignmentObject {

                Assignment = tempItems

                Assignment.append("\(EnteredObjectTextFeild.text!)")

                print(Assignment)

            } else {

                Assignment = [EnteredObjectTextFeild.text!]
                print("user defaults error 2")
            }

            UserDefaults.standard.set(Assignment, forKey: whatGroup + "Assignment")

            EnteredObjectTextFeild.text = ""
        }else {
// MARK: Add Name
            if AllNames.contains("\(EnteredObjectTextFeild.text!)"){
                if namesForEachGroup.contains(EnteredObjectTextFeild.text!) {
                    EnteredObjectTextFeild.text = ""
                    AlertAction(Title: "Name Exists", Message: "This name already exists in this group", alerTitle: "OK")
                }else {
                    addNameToGroup()
                    EnteredObjectTextFeild.text = ""
                }
            }else {
                let NameObject = UserDefaults.standard.object(forKey: "Name")  as? [String]

                var Name: [String]

                if let tempItems = NameObject {

                    Name = tempItems

                    Name.append("\(EnteredObjectTextFeild.text!)")

                    print(Name)

                } else {

                    Name = [EnteredObjectTextFeild.text!]
                    print("user defaults error 3")
                }

                UserDefaults.standard.set(Name, forKey: "Name")
                addNameToGroup()
                EnteredObjectTextFeild.text = ""
                NamePicker.reloadAllComponents()
                AsignmentPicker.reloadAllComponents()
            }

        }
        }else if isInMain == false {
// MARK: Add Group
        if allGroups.contains("\(EnteredObjectTextFeild.text!)"){
                EnteredObjectTextFeild.text = ""
                AlertAction(Title: "Group Exists", Message: "This Group already exists", alerTitle: "OK")
        }else {
            let groupsObject = UserDefaults.standard.object(forKey: "Groups")  as? [String]

            var groups: [String]

            if let tempItems = groupsObject {

                groups = tempItems

                groups.append(EnteredObjectTextFeild.text!)

                print(groups)

            } else {

                groups = [EnteredObjectTextFeild.text!]
                print("Bad")
            }

            UserDefaults.standard.set(groups, forKey: "Groups")

            EnteredObjectTextFeild.text = ""


        }
        NamePicker.reloadAllComponents()
        AsignmentPicker.reloadAllComponents()
    }
    NamePicker.reloadAllComponents()
    AsignmentPicker.reloadAllComponents()
    }
// MARK: Add Name func
func addNameToGroup(){
    let nameObject = UserDefaults.standard.object(forKey: "Name" + whatGroup)  as? [String]

    var NameForGroup: [String]

    if let tempItems = nameObject {

        NameForGroup = tempItems

        NameForGroup.append("\(EnteredObjectTextFeild.text!)")

        print(NameForGroup)

    } else {

        NameForGroup = [EnteredObjectTextFeild.text!]
        print("user defaults error 4")
    }

    UserDefaults.standard.set(NameForGroup, forKey: "Name" + whatGroup)
    namesForEachGroup = NameForGroup
    print("saved to group")
    EnteredObjectTextFeild.text = ""
    NamePicker.reloadAllComponents()
    AsignmentPicker.reloadAllComponents()
}

and this is where I get back to the first VC 这是我回到第一个VC的地方

@IBAction func BackPressed(_ sender: UIButton) {
    if isInMain == true {

        performSegue(withIdentifier: "FromAddToMain", sender: UIButton())

    }else {

        performSegue(withIdentifier: "FromAddToGroup", sender: UIButton())

    }
}

我将此代码添加到每个出口segue

theAssignments = UserDefaults.standard.array(forKey: whatGroup + "Assignments") as! [String]

The simplest solution is how to pass the data in a undwin-perform, the configuration is; 最简单的解决方案是如何以非双赢的方式传递数据,配置为: a function is created in the parent controller that will be the one that receives the execution focus: 在父控制器中创建一个函数,该函数将成为接收执行焦点的函数:

  @IBAction func close (segue: UIStoryboard) {
     tableView.reload ()
  }

Then in the son controller the undwin is created segue (backwards) assigning the close function previously created, and in the output function execute the line. 然后,在子控制器中,创建undwin(向后),以分配先前创建的关闭函数,并在输出函数中执行该行。

performsegue (whithIdentifier: "undwinSegueclose", sender: self)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM