首页 文章

如何从同一类中的prepareForSegue方法访问覆盖func tableView属性

提问于
浏览
1

我有两个viewControllers.First一个是tableViewController,第二个是webViewController . 我想使用segue将数据从第一个vc传递到第二个vc . 出于这个原因,我想要覆盖func tableView(tableView:UITableView,didSelectRowAtIndexPath indexPath:NSIndexPath)中的“chosenCellIndex”值来准备ForSegue方法 . 但我无法从prepareForSegue方法访问selectedCellIndex值 . 请帮忙 .

class NewsTableViewController:UITableViewController {

@IBOutlet var Alphacell: UITableView!

var chosenCellIndex = 0
//var temp = 0
var newspaper = ["A","B","C"]


override func viewDidLoad() {
    super.viewDidLoad()

}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return newspaper.count
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Alphacell", forIndexPath: indexPath) as UITableViewCell

    cell.textLabel?.text = newspaper[indexPath.row]

   // Alphacell.tag = indexPath.row
    //Alphacell.addTarget(self, action: "buttonClicked:",forControlEvents: UIControlEvents.TouchUpInside)

    return cell
}

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

    chosenCellIndex = indexPath.row
    //println(chosenCellIndex)

    // Start segue with index of cell clicked
    //self.performSegueWithIdentifier("Alphacell", sender: self)

}


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

    let secondViewController = segue.destinationViewController as WebViewController
    secondViewController.receivedCellIndex = chosenCellIndex
    println(chosenCellIndex)
}

}

3 回答

  • 0

    为了获得选择的单元索引,您需要获取所选行的索引路径,然后需要从indexpath获取section或row索引 .

    获取行索引,请参阅以下代码

    let indexPath = tableName.indexPathForSelectedRow
        let section = indexPath?.section
        let row = indexPath?.row
    
  • 0

    确保您已在故事板中的segue上设置标识符,然后执行以下操作:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "someIdentifier"{
            let secondViewController = segue.destinationViewController as? WebViewController
    //Also, make sure this is the name of the ViewController you are perfoming the segue to.
            secondViewController.receivedCellIndex = chosenCellIndex
            print(chosenCellIndex)
        }
        }
    

    另外,你使用的是什么版本的Xcode和Swift? println()现在只是print() .

  • 1

    最好的方法是从选择行功能,例如

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    
            let objects = newspaper[indexPath.row]
            let vc = storyboard.instantiateViewControllerWithIdentifier("someViewController") as! UIViewController
            vc.someString = objects.title
            self.presentViewController(vc, animated: true, completion: nil)
    
    }
    

    和prepareForSegue使用此代码:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let path = self.tableView.indexPathForSelectedRow()!
        segue.destinationViewController.detail = self.detailForIndexPath(path)
    }
    

相关问题