2015-11-06 125 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本身的情況下,作爲代表

相關問題