我有一个包含2个部分的TableView,每个部分连接到另一个ViewController,第一部分名称为segue.identifier ==“schowDetail”完美无缺,但第二部分:segue.identifier ==“section2segue”不工作。我已经编写了我找到的代码@IBOutlet weak var textlabel:UILabel!在Section2ViewController中,他应该显示MasterViewController prepareforsegue中的文本,但是他只是在Section2ViewController中显示标签,我在performsegue中做错了什么?或问题在哪里。
我上传link form MasterViewController,Code来自Section2ViewController,代码来自prepareforsegue。来自Main.storyboard的Screenshot,也许这有助于更好地解释一些事情。
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.
}
}
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"{
if let s2v=segue.destination as? Section2ViewController{
s2v.Section1Index=sender as? Section1Index
}
}
}
答案 0 :(得分:0)
在masterviewcontroller中更改此内容
(-a - b)
和第2节
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)
}
}
答案 1 :(得分:-1)
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