[英]Swift 2 - prepareForSegue nil Value
我試圖在UITableView
選擇一行時通過另一個視圖發送鏈接。 當我選擇該行時,我可以看到鏈接已打印,但是該值不會到達函數prepareForSegue
。 似乎prepareForSegue
函數在UITableView
的選擇行之前被調用。
var videouserPath = ""
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
videouserPath = self.arrayUserVideo[indexPath.row][4]
print("tableview: ----\(videouserPath)")
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
print("segue: ----\(videouserPath)")
if segue.identifier == "toUserVideo"
{
if let destinationVC = segue.destinationViewController as? GetVideo_ViewController{
destinationVC.videoToDisplay = videouserPath
}
}
}
我進入調試狀態:
segue:----
表格視圖:---- https://example.com/resources/1361929513_02-02-2016_125830.mov
為什么在選擇之前調用segue函數?
從故事板將UIStoryboardSegue
鏈接到UITableViewCell
,消息傳遞的順序為prepareForSegue
, didSelectRowAtIndexPath
。
完全繞過didSelectRowAtIndexPath
。
對於通用單元和單選單元格,您無需實現didSelectRowAtIndexPath
。 讓與UITAbleViewCell
關聯的segue進行工作,並按以下方式處理選擇:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "detailSegueIdentifier" {
if let indexPath = tableView.indexPathForSelectedRow {
print(indexPath)
}
}
}
如果你絕對需要SEGUE之前做額外的工作,不要把它關聯到UITableViewCell
,但到UITableViewController
。 然后,您需要以編程方式觸發它。 靈感在這里 。
在IB中 ,將segue分配給表視圖控制器,為其提供一個標識符(例如detailSegueIdentifier
),然后像這樣調用它。
override func tableView(tableView: UITableView,
didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("didSelectRowAtIndexPath")
self.performSegueWithIdentifier("detailSegueIdentifier", sender: nil)
}
將參數傳遞給segue:
調用performSegueWithIdentifier
還將使您有機會顯式傳遞參數,而不是第二個參數indexPathForSelectedRow
,並且不依賴於global(*)。
override func tableView(tableView: UITableView,
didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("didSelectRowAtIndexPath")
self.performSegueWithIdentifier("detailSegueIdentifier", sender: indexPath)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "detailSegueIdentifier" {
if let indexPath = sender as? NSIndexPath {
let name = db[indexPath.row].key
if let controller = segue.destinationViewController as? DetailViewController {
controller.name = name
}
}
}
}
(*) 如果可以幫助,永遠不要依賴全局變量 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.