ios - 在另一个 View 中从列表中选择项目

标签 ios swift

我有一个选择状态按钮。当用户点击它时,他会看到带有状态列表的新 TableView 。当他选择一个时,他返回到上一个 View (它有一个导航栏 Controller )并且按钮名称更改为选中状态。

我理解我创建发送 selectedState 的 segue 的原理,但是我不知道如何返回选定的值。还有另一个错误

enter image description here

表格 View 选择两个单元格。这是我的代码:

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?

但是我不明白:(

最佳答案

这是一个委托(delegate)的简单示例,其中 MainViewController 是第一个包含 selectStateButton 的 View Controller ,StatesViewController 是点击后打开的 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])
  }
}

关于ios - 在另一个 View 中从列表中选择项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33575912/

相关文章:

python - 图片无法发送到我的服务器

swift - Swift 3 中的 HTTP 请求

swift - 在 swift 中将任何文本字段字符串值导出到 csv 时,如何限制“字符更改为”?

ios - 如何在 Swift 3 中将 Core Data 与 iCloud 同步

ios - 如何将表格 View 单元格计数值分配给编程 UILabel?

ios - 由于某种原因,方法 DidBeginEditing : (UITextField *)textfield is not working

javascript - 我运行了 react native 链接 Realm 但仍然出现错误

ios - 如何在iOS中使用IAPHelper从应用程序商店获取最近购买的单个产品收据?

iphone - 在 iOS 上创建自定义循环 UIScrollView

ios - Xcode 修复问题 "Add the ' iCloud 容器对您的 App ID 的授权不起作用