Swift中UITableView多分区点击行向DetailVC传值异常求助
Hey there! Let's break down why only your first section's rows are passing the correct image to DetailViewController—the issue is exactly where you suspected: that switch statement.
The Root Problem
Right now, your switch only checks indexPath.row, but row numbers reset for every section. For example:
- Section 0, Row 0 = Blue (works as expected)
- Section 1, Row 0 = Orange (but your switch still picks Blue because it matches case 0)
- Section 2, Row 1 = Yellow (switch hits case 1 and passes Green, which is totally wrong)
You're not accounting for the indexPath.section value at all, which is why non-first-section rows aren't behaving correctly.
The Clean, Scalable Fix
Instead of hardcoding every possible row with a switch, use your existing twoDimensionalArray to pull the correct image name directly from the selected indexPath. This aligns with your data source structure and avoids messy hardcoding.
Here's how to update your didSelectRowAt method:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // Safely instantiate the detail view controller guard let vc = self.storyboard?.instantiateViewController(withIdentifier: "VC2") as? DetailViewController else { print("Failed to load DetailViewController") return } // Get the exact image name from your data source using section + row let selectedImageName = twoDimensionalArray[indexPath.section][indexPath.row] // Safely unwrap the image to avoid crashes if the asset is missing if let selectedImage = UIImage(named: selectedImageName) { vc.passedImage = selectedImage self.present(vc, animated: true, completion: nil) } else { // Optional: Handle missing image (e.g., show a placeholder or alert) print("Image \(selectedImageName) not found in asset catalog!") } }
Why This Works
- Consistency: You're using the same data source (
twoDimensionalArray) that populates your table cells to fetch the selection image—no mismatched logic. - Scalability: If you add/remove items or sections later, this code will automatically adapt without needing to update a switch statement.
- Safety: The optional binding for
UIImage(named:)prevents crashes if an image file is missing from your project.
内容的提问来源于stack exchange,提问作者Raja Prahlad

