2015-11-06 121 views
0

我有一个选择状态按钮。当用户点击它时,他会看到具有状态列表的新表格视图。当他选择一个时,他会回到先前的视图(它有一个导航栏控制器),按钮名称更改为选定状态。从另一个视图中的列表中选择项目

我明白我创建一个segue的地方,发送selectedState,但如何返回选定的值,我不知道。并具有另一个bug

enter image description here

表视图选择两个细胞。这里是我的代码:

class StateTableViewController: UITableViewController { 
    let selectedState:String = "AZ" 
    let states = ["AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DC", "DE", "FL", "GA", 
     "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", 
     "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", 
     "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", 
     "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY"] 


    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    // MARK: - Table view data source 

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

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


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

     // Configure the cell... 
     cell.textLabel?.text = self.states[indexPath.row] 

     if (self.states[indexPath.row] == self.selectedState) { 
      cell.accessoryType = UITableViewCellAccessoryType.Checkmark 
     } 

     return cell 
    } 
} 

这个问题是类似How to create selecting option UITableView similar in iOS Settings in Swift?

,但我不明白它:(

+1

如果不是选定状态,则需要一个'else'子句将附件设置为none。你如何触发回到前一个场景?通过导航控制器上的“后退”按钮? – Paulw11

+0

您可以使用展开的segue将数据传回给前一个控制器。本教程[这里](http://www.raywenderlich.com/113394/storyboards-tutorial-in-ios-9-part-2)就是一个很好的例子。 – Caleb

回答

1

这里是一个委派的快速示例,其中MainViewController是第一个包含selectStateButton和的视图控制器10是tableviewcontroller,它在点击呈现状态列表的按钮后打开。如果您有任何问题,请随时询问:

class MainViewController: UIViewController, StateSelector { 
    @IBOutlet weak var selectStateButton: UIButton! 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "Select state" { 
     if let navigationController = segue.destinationViewController as? UINavigationController, let statesViewController = navigationController.topViewController as? StatesViewController { 
     statesViewController.delegate = self 
     statesViewController.selectedState = (sender as? UIButton)?.titleForState(.Normal) 
     } 
    } 
    } 

    func didSelectState(state: String) { 
    selectStateButton.setTitle(state, forState: .Normal) 
    dismissViewControllerAnimated(true, completion: nil) 
    } 
} 

protocol StateSelector { 
    func didSelectState(state: String) 
} 

class StatesViewController: UITableViewController { 
    var delegate: StateSelector? 
    var selectedState: String? 

    let states = ["AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DC", "DE", "FL", "GA", 
    "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", 
    "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", 
    "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", 
    "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY"] 

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

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

    cell.textLabel?.text = self.states[indexPath.row] 

    if (self.states[indexPath.row] == self.selectedState) { 
     cell.accessoryType = .Checkmark 
    } else { 
     cell.accessoryType = .None 
    } 

    return cell 
    } 

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    delegate?.didSelectState(states[indexPath.row]) 
    } 
} 
+0

它不工作;(它显示状态列表好,但是当我点击任何单元格协议函数不会调用'''didSelectState'''函数。我的完整代码:http://pastebin.com/AuPCcS0U http ://pastebin.com/4utbeDTU – Arti

+1

你能告诉我你的故事板的截图吗? –

+0

http://storage8.static.itmages.ru/i/15/1109/h_1447068028_9440763_c94fca12fd.png – Arti

0

您可以使用unwindSegue(segue:UISegue)或使用prepareforSegue提供到目的地VC本身的情况下,作为代表

相关问题