簡體   English   中英

從另一個視圖的列表中選擇項目

[英]Select item from list in another view

我有一個選擇狀態按鈕。 當用戶單擊它時,他會看到帶有狀態列表的新表視圖。 選擇一個時,他返回到上一個視圖(它具有導航欄控制器),並且按鈕名稱已更改為選定狀態。

我理解我在發送selectedState創建segue的原理,但是我不知道如何返回選定的值。 還有另一個錯誤

在此處輸入圖片說明

表格視圖選擇兩個單元格。 這是我的代碼:

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
    }
}

這個問題很相似如何在Swift的iOS設置中創建類似的選擇選項UITableView?

但我不明白:(

這是一個委派的快速示例,其中MainViewController是第一個包含selectStateButtonStatesViewController是在點擊顯示狀態列表的按鈕后打開的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])
  }
}

您可以使用unwindSegue(segue:UISegue)或者在使用prepareforSegue作為委托提供給目標VC本身的情況下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM