Swift技术问题:跳转页面按钮未根据选中列表项正确重命名
Hey there! Let's troubleshoot why your button isn't showing the correct dynamic title when you navigate from your TableView. Here are the key fixes to get this working:
1. Move Title-Setting Logic to the Right Lifecycle Method
From your code snippet, it looks like you're trying to set the button title inside the testBtn IBAction—but that method only runs when the button is tapped! By then, the page has already loaded, and the button is stuck showing its default "Button" text.
Instead, set the button title when the detail page loads using a lifecycle method like viewWillAppear or viewDidLoad. This ensures the correct text is displayed as soon as the page appears.
2. Ensure Selected Value is Properly Passed
First, make sure you're sending the selected TableView item's data to the detail view controller. Here's how to set that up:
Step 1: Add a Property to Your Detail View Controller
In your detail VC, define a variable to hold the selected name:
// DetailViewController.swift import UIKit class DetailViewController: UIViewController { // Add this property to receive the selected name var selectedItemName: String? // Make sure you have an IBOutlet for your button (not just an IBAction!) @IBOutlet weak var testBtn: UIButton! override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // Set the button title here if let name = selectedItemName { testBtn.setTitle("\(name)_detail", for: .normal) } } // Your existing IBAction (keep this if you need button tap functionality) @IBAction func testBtn(_ sender: AnyObject) { // Button tap logic here, no need to set title here anymore } }
Step 2: Pass the Selected Name from the TableView VC
In your TableView's view controller, update the didSelectRowAt method to send the selected item's name to the detail VC:
// TableViewController.swift override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // Get the selected name from your data source let selectedName = names[indexPath.row] // Instantiate the detail view controller (adjust the storyboard ID to match yours) guard let detailVC = storyboard?.instantiateViewController(withIdentifier: "DetailViewController") as? DetailViewController else { return } // Pass the selected name detailVC.selectedItemName = selectedName // Navigate to the detail page navigationController?.pushViewController(detailVC, animated: true) }
3. Double-Check Outlets
Make sure your button has both an IBOutlet (connected to the testBtn variable in code) and an IBAction (if you need tap functionality). Without the IBOutlet, you can't programmatically modify the button's title.
Quick Verification Tip:
- Open your storyboard, select the button.
- In the Connections Inspector (right panel), confirm there's a connection from "Outlet" to your
testBtnvariable, and a connection from "Action" to yourtestBtnIBAction.
That should do it! When you select "first" in the TableView, the detail page will load with the button showing "first_detail" right away.
内容的提问来源于stack exchange,提问作者Kubik Sukenik

