Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 具有两个部分的TableView,Can';t将数据传递给Section2ViewController_Swift - Fatal编程技术网

Swift 具有两个部分的TableView,Can';t将数据传递给Section2ViewController

Swift 具有两个部分的TableView,Can';t将数据传递给Section2ViewController,swift,Swift,我有一个包含2个部分的TableView,每个部分连接到另一个ViewController,第一个部分的名称为segue.identifier==“schowDetail”,工作正常,但第二个部分:segue.identifier==“section2segue”不工作。我已经编写了我认为正确的代码@IBOutlet弱var textlab:UILabel!在Section2ViewController中,他应该显示MasterViewController PrepareforScheue中的文

我有一个包含2个部分的TableView,每个部分连接到另一个ViewController,第一个部分的名称为segue.identifier==“schowDetail”,工作正常,但第二个部分:segue.identifier==“section2segue”不工作。我已经编写了我认为正确的代码@IBOutlet弱var textlab:UILabel!在Section2ViewController中,他应该显示MasterViewController PrepareforScheue中的文本,但他只是在Section2ViewController中显示标签,我在PerformScheue中是否有错误?或者问题出在哪里

我上传了Section2ViewController中的代码,以及prepareforsegue中的代码。从Main.storyboard,也许这有助于更好地解释一些事情

class Section2ViewController: UIViewController {

@IBOutlet weak var textlabel: UILabel!

var Section1Index : Section1Index? {

    didSet {
        configureView()
    }
}
func configureView() {
    if let Section1Index = Section1Index {
        if let textlabel = textlabel {
            textlabel.text=Section1Index.name
            print("hier ist:\(Section1Index.name)")
        }
    }
}
override func viewDidLoad() {
    super.viewDidLoad()
    configureView()

}

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


在masterviewcontroller中更改此选项

    import UIKit

class MasterViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

  @IBOutlet var tableView: UITableView!
  @IBOutlet var searchFooter: SearchFooter!

  var detailViewController: DetailViewController? = nil
  var indication = [Indications]()
  var filteredCandies = [Indications]()
  let searchController = UISearchController(searchResultsController: nil)

  var section1=[Section1Index]()


  override func viewDidLoad() {
    super.viewDidLoad()

    searchController.searchResultsUpdater = self
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.searchBar.placeholder = "Search"
    navigationItem.searchController = searchController
    definesPresentationContext = true

    searchController.searchBar.scopeButtonTitles = ["All", "Magendarmbeschwerden", "Mund- und Rachenraum", "Other"]
    searchController.searchBar.delegate = self

    tableView.tableHeaderView = searchFooter

    section1 = [
        Section1Index(name: "Was ist Ohrakupunktur", beschreibung: "Ohrakupunktur ist ..."),
        Section1Index(name: "Wie mach ich das", beschreibung: "So machen Sie das ..."),
        Section1Index(name: "was brauch ich", beschreibung: "Das brauchen Sie ...")

    ]

    indication = [
        Indications(category: "Magendarmbeschwerden", name: "Bauchschmerzen", numOfPoint: "6", indication: "Kopfschmerzen", beschreibung: "Die akute Bronchitis ist eine akute, in der Regel infektionsbedingte Entzündung der Atemwege, welche sich im Bereich der Bronchien abspielt. Bei Mitbeteiligung der Luftröhre (Trachea) spricht man von einer Tracheobronchitis.KopfschmerzenDie akute Bronchitis ist eine akute, in der Regel infektionsbedingte Entzündung der Atemwege, welche sich im Bereich der Bronchien abspielt. Bei Mitbeteiligung der Luftröhre (Trachea) spricht man von einer Tracheobronchitis.KopfschmerzenDie akute Bronchitis ist eine akute, in der Regel infektionsbedingte Entzündung der Atemwege, welche sich im Bereich der Bronchien abspielt. Bei Mitbeteiligung der Luftröhre (Trachea) spricht man von einer Tracheobronchitis.KopfschmerzenDie akute Bronchitis ist eine akute, in der Regel infektionsbedingte Entzündung der Atemwege, welche sich im Bereich der Bronchien abspielt. Bei Mitbeteiligung der Luftröhre (Trachea) spricht man von einer Tracheobronchitis.Kopfschmerzen"),

        Indications(category: "Endokrine", name: "Alkoholkonsum", numOfPoint: "6", indication: "Kopfschmerzen", beschreibung: "Die akute Bronchitis ist eine akute, in der Regel infektionsbedingte Entzündung der Atemwege, welche sich im Bereich der Bronchien abspielt. Bei Mitbeteiligung der Luftröhre (Trachea) spricht man von einer Tracheobronchitis.."),
      ]

    if let splitViewController = splitViewController {
      let controllers = splitViewController.viewControllers
      detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController
    }
  }

  override func viewWillAppear(_ animated: Bool) {
    if splitViewController!.isCollapsed {
      if let selectionIndexPath = tableView.indexPathForSelectedRow {
        tableView.deselectRow(at: selectionIndexPath, animated: animated)
      }
    }
    super.viewWillAppear(animated)
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
  }

  func numberOfSections(in tableView: UITableView) -> Int {
    return 2
  }

  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if section == 0{
        return section1.count
    }else if isFiltering() {
      searchFooter.setIsFilteringToShow(filteredItemCount: filteredCandies.count, of: indication.count)
      return filteredCandies.count
    }
    searchFooter.setNotFiltering()
    return indication.count
  }

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cellID=["Cell2","Cell"][indexPath.section]
    let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath)
    let candy: Indications
    if indexPath.section==0{
        cell.textLabel?.text=section1[indexPath.row].name
        return cell
    }else if isFiltering(){
        candy = filteredCandies[indexPath.row]
    } else {
      candy = indication[indexPath.row]
    }
    cell.textLabel!.text = candy.name
    cell.detailTextLabel!.text = candy.category
        return cell
  }


  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetail"{
      if let indexPath = tableView.indexPathForSelectedRow {
        let candy: Indications
        if isFiltering() {
          candy = filteredCandies[indexPath.row]
        } else {
          candy = indication[indexPath.row]
        }
        let controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController
        controller.detailIndications = candy
        controller.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
        controller.navigationItem.leftItemsSupplementBackButton = true
      }
    }else if segue.identifier=="section2segue"{
        let s2v = (segue.destination as! UINavigationController).topViewController as! Section2ViewController
            let section1IndexName = sender as! UITableViewCell
        print(section1IndexName.textLabel?.text)
        s2v.section1Index = (section1IndexName.textLabel?.text)! //your sender is a UITableViewCell
        }
    }


  func filterContentForSearchText(_ searchText: String, scope: String = "All") {
    filteredCandies = indication.filter({( candy : Indications) -> Bool in
      let doesCategoryMatch = (scope == "All") || (candy.category == scope)

      if searchBarIsEmpty() {
        return doesCategoryMatch
      } else {
        return doesCategoryMatch && candy.name.lowercased().contains(searchText.lowercased())
      }
    })
    tableView.reloadData()
  }

  func searchBarIsEmpty() -> Bool {
    return searchController.searchBar.text?.isEmpty ?? true
  }

  func isFiltering() -> Bool {
    let searchBarScopeIsFiltering = searchController.searchBar.selectedScopeButtonIndex != 0
    return searchController.isActive && (!searchBarIsEmpty() || searchBarScopeIsFiltering)
  }
}
extension MasterViewController: UISearchBarDelegate {
  func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
    filterContentForSearchText(searchBar.text!, scope: searchBar.scopeButtonTitles![selectedScope])
  }
}

extension MasterViewController: UISearchResultsUpdating {
  func updateSearchResults(for searchController: UISearchController) {
    let searchBar = searchController.searchBar
    let scope = searchBar.scopeButtonTitles![searchBar.selectedScopeButtonIndex]
    filterContentForSearchText(searchController.searchBar.text!, scope: scope)
  }
}
在第二部分

import UIKit

class Section2ViewController: UIViewController {


    @IBOutlet weak var textlabel: UILabel!

    var section1Index: String? {
        didSet {
            configureView()
            print("DID SET CALLED \(section1Index)")
        }
    }
    func configureView() {
        if let section1IndexUnwrapped = section1Index {
            print("Section name is: \(section1IndexUnwrapped)")
            if let textlabel = textlabel {
                textlabel.text = section1IndexUnwrapped
                print("hier ist:\(section1IndexUnwrapped)")
            }
        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        configureView()

    }

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


}
将您的代码更新到此位置。它无法传递数据,因为它确实崩溃了

let s2v = (segue.destination as! UINavigationController).topViewController as! Section2ViewController

非常感谢您的快速响应,但它仍然不起作用,我现在真的很疯狂,文本标签什么都没有显示。只需像我向您展示的那样更改代码,它就会起作用。请注意我更改的变量命名。我已经下载了您的代码,并按照上面的方式进行了更改,它确实有效。我已经在我的项目中重新编码了您的代码,但是Section2ViewController仅在显示屏上显示“标签”,他应该显示“section1=[Section1Index(名称:“Was ist Ohrakupunktur”,beschreibung:“Ohrakupunktur ist…”)中的“名称”。]正确检查,因为我已经更改了两个视图控制器。第二个视图控制器现在有一个sting,而不是您的结构。是的,我检查了所有代码。我现在已在GitHub中更新了我的项目,这是更改后的新代码。您能再看一遍吗?可能我错过了什么。再次感谢您的帮助!嗨,非常感谢您的回复!我已经修改了这样,但仍然无法将数据传递给Section2ViewController。
else if segue.identifier=="section2Segue"{
            let s2v = segue.destination as! Section2ViewController
            let section1IndexName = sender as! UITableViewCell
            print(section1IndexName.textLabel?.text)
            s2v.section1Index = (section1IndexName.textLabel?.text)! 
        }
let s2v = (segue.destination as! UINavigationController).topViewController as! Section2ViewController