我試圖在 TableView 中選擇或按下單元格時傳遞資料,它正在作業,我可以在選擇該單元格時列印結果。第二個視圖顯示資料時的問題為零。
她是選擇單元格時的代碼:
var feedItems: NSArray = NSArray()
var selectedPlayer : UsersModel = UsersModel()
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// Return the number of feed items
return feedItems.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Retrieve cell
let cellIdentifier: String = "BasicCell"
let myCell: WinnerTableCell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) as! WinnerTableCell
// Get the location to be shown
let item: UsersModel = feedItems[indexPath.row] as! UsersModel
// Get references to labels of cell
myCell.lbTextName!.text = item.name
myCell.lbScore!.text = item.score
let imageURL = URL(string: "https://mywebsite.com/image-upload/img/\(item.userImage ?? "nil")")
myCell.userImage.sd_setImage(with: imageURL, placeholderImage: UIImage(named: "nullImageQuestion.png"))
return myCell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedPlayer = feedItems[indexPath.row] as! UsersModel
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "PlayersDetails") as! PlayersDetails
nextViewController.name = selectedPlayer.name ?? "nil"
print("Print When select cell \(selectedPlayer.name ?? "nil")")
}
而她就是第二個視圖中的代碼:
@IBOutlet weak var lbName: UILabel!
@IBOutlet weak var userImage: UIImageView!
var name = ""
var selectedUser : UsersModel?
override func viewDidLoad() {
super.viewDidLoad()
lbName.text = selectedUser?.name
print("Print when second view open via viewdidload \(selectedUser?.name ?? "nil")")
// Do any additional setup after loading the view.
}
我試圖從第二個視圖列印,但它什么也沒顯示。我犯了什么錯誤?
這是我在列印時得到的:
列印時有一些我無法理解的東西,它是從 secondview 開始的?
注意:我沒有使用導航控制器。
謝謝
uj5u.com熱心網友回復:
有兩個嚴重的問題:
主要問題是您將名稱分配給
name
屬性,但您分配selectedUser?.name
給目標控制器中的標簽,這當然是nil
Taimoor 已經解決了第二個問題:您必須展示或推動控制器。
所以替換didSelect
為
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedPlayer = feedItems[indexPath.row] as! UsersModel
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "PlayersDetails") as! PlayersDetails
nextViewController.selectedUser = selectedPlayer
self.present(nextViewController, animated: true)
}
請不要NSArray
在 Swift中使用。宣告資料源陣列
var feedItems = [UsersModel]() // why not just `User`?
并洗掉所有不必要的型別轉換。
uj5u.com熱心網友回復:
您必須使用pushViewController將資料帶到下一個螢屏。只需在didSelectRowAt函式中再添加一行,如下所示:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectedPlayer = feedItems[indexPath.row] as! UsersModel
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "PlayersDetails") as! PlayersDetails
nextViewController.name = selectedPlayer.name ?? "nil"
print("Selcted \(selectedPlayer.name ?? "nil")")
self.navigationController?.pushViewController(nextViewController, animated: true)
}
這會將您的資料帶到下一個螢屏。
uj5u.com熱心網友回復:
您也可以嘗試執行“nextViewController.loadViewIfNeeded()”
因為你剛剛創建了這個ViewController,但是沒有呈現,根據你的層級關系,選擇使用present或者push呈現,它會執行“ViewDidload()”
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/511914.html
標籤:IOS迅速代码