2016-09-24 46 views
1

我有表格視圖,並且在每個單元格中都有一個打開操作表單的按鈕。一旦該操作表打開,就會有一個「報告進度」操作。當我按下該動作按鈕時,我想打開另一個具有segue標識符「ShowProgressReport」的視圖控制器。在那個新的視圖控制器中,我有一個默認爲空的屬性「ProjectName」。我希望該屬性從前一個視圖控制器中獲取價值。但是我無法在「prepareForSegue」方法中獲得索引值。以下是我已經編碼:Swift(Xcode) - 將值傳遞給下一個控制器從表格單元格 - >動作按鈕 - > Segue

的TableView

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> ProjectTableViewCell { 

     let cell = tableView.dequeueReusableCellWithIdentifier("ProjectViewCell", forIndexPath:indexPath) as! ProjectTableViewCell 

     // Remove indenting of cell 
     cell.separatorInset = UIEdgeInsetsZero 
     cell.layoutMargins = UIEdgeInsetsZero 

     // Set project name 
     cell.ProjectName.text = self.ProjectsArray[indexPath.row] as? String 

     // Set action button 
     cell.ActionButton.tag = indexPath.row 
     cell.ActionButton.addTarget(self, action: #selector(ProjectsController.projectActions(_:)), forControlEvents: .TouchUpInside) 

     return cell 

    } 

按鈕操作手冊

@IBAction func projectActions(sender: UIButton) { 
     let index = sender.tag 

     let optionMenu = UIAlertController(title: nil, message: self.ProjectsArray[index] as? String, preferredStyle: .ActionSheet) 

     // Report Progress 
     let reportProgressAction = UIAlertAction(title: "Report Progress", style: .Default, handler: { 
      (alert: UIAlertAction!) -> Void in 
      self.performSegueWithIdentifier("ShowReportProgress", sender: self) 
     }) 

     // Cancel 
     let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: { 
      (alert: UIAlertAction!) -> Void in 

     }) 

     optionMenu.addAction(reportProgressAction) 
     optionMenu.addAction(cancelAction) 

     self.presentViewController(optionMenu, animated: true, completion: nil) 
    } 

執行Segue公司

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     let index = sender?.tag 

     if segue.identifier == "ShowReportProgress" 
     { 
      let upcoming: ReportProgressController = segue.destinationViewController as! ReportProgressController 

      let ProjectName = self.ProjectsArray[index!] as? String --> Here it says: fatal error: unexpectedly found nil while unwrapping an Optional value 
      upcoming.ProjectName = ProjectName! 
     } 

    } 

有什麼幫助嗎?

+0

將索引保留爲成員變量並將值從'projectActions'方法存儲到它 –

+0

我在@IBAction方法中存儲了像「let index = sender.tag」這樣的索引值。我還需要寫什麼來使其成爲一個成員變量? – Ali

+0

完成,感謝Midhun MP – Ali

回答

2

在這一行

self.performSegueWithIdentifier("ShowReportProgress", sender: self) 

要傳遞self它代表視圖控制器。你可能是想傳遞按鈕。

self.performSegueWithIdentifier("ShowReportProgress", sender: sender) 

你應該總是使用可選的綁定,以避免崩潰,並解開這些都保證存在價值。

if let button = sender where segue.identifier == "ShowReportProgress" { 
    let upcoming: ReportProgressController = segue.destinationViewController as! ReportProgressController 

    let ProjectName = self.ProjectsArray[button.tag] as! String 
    upcoming.ProjectName = ProjectName 
} 
+0

喲.. !!!完成。感謝vadian;) – Ali

+0

但「如果讓按鈕=發件人,讓segue.identifier ==」ShowReportProgress「{」造成的問題,自己修復它。 – Ali

-1

替換此

self.performSegueWithIdentifier("ShowReportProgress", sender: self) 

隨着

self.performSegueWithIdentifier("ShowReportProgress", sender: sender) 

你在performSegueWithIdentifier通過控制裁判,而不是按鈕參考的。

+0

爲什麼downvote?誰做的? – Sahil

相關問題