2015-06-09 46 views
0

我在表格视图中有推荐歌曲的歌曲页面。当用户点击推荐的歌曲时,我想用新数据重新加载歌曲页面。要做到这一点,我用这个方法,从细胞到它自己的看法控制器赛格瑞:用新数据刷新相同的视图控制器?

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

     let newSong = recommendedTitles[indexPath.row] 

     self.performSegueWithIdentifier("refreshSong", sender: newSong) 

    } 

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

     if segue.identifier == "refreshSong" { 
      let newSong:String = sender as! String 
      let song = segue.destinationViewController as! SongViewController 
      song.search = newSong 

     } 
    } 

但我发现了一个错误,在let newSong:String = sender as! String,它could not cast value of type recommendationCell to NSString。用上述的tableView方法做所有这些的最好方法是什么?

+0

你想在'newSong'中传递什么? – iDhaval

+0

@DhavalThanki recommendedTitles [indexPath.row] – chicobermuda

+0

你在故事板中有什么样的细节?似乎你已经有连接到单元格的细胞 –

回答

1

你不必声明全局变量。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

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

} 

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

    if segue.identifier == "refreshSong" { 
     let indexPath = tableView.indexPathForSelectedRow() 
     let song = segue.destinationViewController as! SongViewController 
     song.search = recommendedTitles[(indexPath?.row)!] 

    } 
} 
+0

当我通过recommendedTitles [indexPath.row]时,我将它传递给已经是字符串在viewDidLoad中声明。我怎样才能确保我传递的信息覆盖了我在viewDidLoad中设置的内容? – chicobermuda

+0

你可以在'SongViewController'中声明'搜索'变量的默认值'var search:String =“”'不要覆盖'viewDidLoad'的值 – iDhaval

+0

那么如何确保recommendedTitles [indexPath.row]作为搜索变量覆盖我手动设置它在viewDidLoad()? – chicobermuda

0

你试试这个。就拿变量newSong在声明部分

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

     newSong = recommendedTitles[indexPath.row] 

     self.performSegueWithIdentifier("refreshSong", sender: nil) 

    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
     if segue.identifier == "refreshSong" { 
      let song = segue.destinationViewController as! SongViewController 
      song.search = newSong 

     } 
    }