Swift 4:如何在didSelectItemAt IndexPath中嵌入字典数组并传值至其他VC
Hey there! Let's tackle your two Swift UICollectionView questions one by one, with code examples tailored to your existing setup:
didSelectItemAt First, define an array property in your view controller to store the dictionaries (this keeps the data persistent across selections). Then, in the didSelectItemAt method, construct a dictionary with relevant data from userDetails and add it to the array.
Here's a concrete example:
// Add this as a property in your view controller var selectedItemsArray: [[String: Any]] = [] func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { // Fetch the specific data for the selected cell from userDetails // Adjust this line to match your actual UserDetails structure let selectedCellData = userDetails.cellDataArray[indexPath.item] // Create a dictionary with the data you need to store let itemDictionary: [String: Any] = [ "userId": selectedCellData.id, "userName": selectedCellData.name, "fullImageUrl": Constant.url.imageBaseUrl + selectedCellData.imagePath // Add any other key-value pairs you require ] // Embed the dictionary into your array selectedItemsArray.append(itemDictionary) // Optional: Print to verify the array was updated print("Current selected items array: \(selectedItemsArray)") }
Note: Adjust the selectedCellData line to match how your UserDetails struct/class stores data for each collection view cell.
userDetails to Another View Controller in didSelectItemAt The most straightforward way to pass data between view controllers is using a property on the target view controller. Here's how to implement it:
Step 1: Add a property to your target view controller
In the view controller you want to navigate to (e.g., UserDetailViewController), define a property to receive the userDetails data:
class UserDetailViewController: UIViewController { // Property to hold the incoming user details var incomingUserDetails: UserDetails! // Rest of your view controller code... }
Step 2: Pass the data and navigate in didSelectItemAt
Back in your collection view's view controller, initialize the target VC, assign userDetails to its property, then navigate to it:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { // Initialize the target view controller (adjust the identifier to match your storyboard) guard let detailVC = storyboard?.instantiateViewController(withIdentifier: "UserDetailViewController") as? UserDetailViewController else { print("Failed to initialize UserDetailViewController") return } // Pass your userDetails data to the target VC detailVC.incomingUserDetails = self.userDetails // Navigate to the target VC (use push if using a navigation controller, or present for modals) navigationController?.pushViewController(detailVC, animated: true) // OR present modally: present(detailVC, animated: true, completion: nil) }
Pro tip: Using guard let safely handles cases where the view controller can't be initialized, preventing crashes.
内容的提问来源于stack exchange,提问作者Gorib Developer

