如何通过UIButton关联UIPickerView选中行与对应TableView(Swift)
Got it, let's get this sorted for you! You've already got your UIPickerView set up with the three content categories, now we just need to link that selection to a corresponding TableView when the button is tapped. Here's a step-by-step Swift implementation tailored to your code:
First, drag a UIButton onto your storyboard, then create an IBOutlet and IBAction for it in your ViewController:
@IBOutlet weak var showTableButton: UIButton! @IBAction func didTapShowTable(_ sender: UIButton) { // Selection logic will go here }
Since your code snippet cut off, let's make sure the picker's core data source/delegate methods are fully implemented:
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITableViewDataSource, UITableViewDelegate { @IBOutlet weak var Picker1: UIPickerView! @IBOutlet weak var showTableButton: UIButton! // Add a TableView outlet if you're using one in the same VC @IBOutlet weak var contentTableView: UITableView! let categoryArray = ["G: Classroom friendly", "PG-13: Swear words OK(no sexual innuendo)", "R: Anything goes!"] // Store data for the selected table view var currentTableContent: [String] = [] override func viewDidLoad() { super.viewDidLoad() Picker1.delegate = self Picker1.dataSource = self contentTableView.isHidden = true // Hide table initially contentTableView.delegate = self contentTableView.dataSource = self } // MARK: UIPickerView DataSource func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return categoryArray.count } // MARK: UIPickerView Delegate func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return categoryArray[row] }
Now add the logic to the button action to load the right content based on the picker's selected row. We'll cover two common scenarios:
Scenario 1: Using Separate TableView Controllers
If you've created distinct TableViewControllers for each category (with storyboard IDs set), use this code to navigate to the correct VC:
@IBAction func didTapShowTable(_ sender: UIButton) { let selectedRow = Picker1.selectedRow(inComponent: 0) var targetVC: UIViewController! switch selectedRow { case 0: targetVC = storyboard?.instantiateViewController(withIdentifier: "ClassroomFriendlyVC") as! ClassroomFriendlyTableViewController case 1: targetVC = storyboard?.instantiateViewController(withIdentifier: "PG13VC") as! PG13TableViewController case 2: targetVC = storyboard?.instantiateViewController(withIdentifier: "RContentVC") as! RContentTableViewController default: return } // Push or present based on your navigation setup navigationController?.pushViewController(targetVC, animated: true) // Or use present(targetVC, animated: true) if no navigation controller }
Scenario 2: Using a Single TableView in the Same ViewController
If you want to show/hide one TableView and swap its content, update the button action like this:
@IBAction func didTapShowTable(_ sender: UIButton) { let selectedRow = Picker1.selectedRow(inComponent: 0) // Populate content based on picker selection switch selectedRow { case 0: currentTableContent = ["Math Worksheets", "Science Experiments", "Reading Comprehension"] case 1: currentTableContent = ["Movie Reviews", "Game Guides", "Tech Tutorials"] case 2: currentTableContent = ["Unfiltered Podcasts", "Adult Humor Blogs", "Mature Discussion Threads"] default: currentTableContent = [] } // Show and refresh the table view contentTableView.isHidden = false contentTableView.reloadData() } // MARK: UITableView DataSource func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return currentTableContent.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "ContentCell", for: indexPath) cell.textLabel?.text = currentTableContent[indexPath.row] return cell }
Just make sure your TableView has a reusable cell with the identifier "ContentCell" set in the storyboard!
内容的提问来源于stack exchange,提问作者CDRom

