ios - swift, tableView selectedTypes 按钮

标签 ios swift xcode swift3

我需要帮助,看这门课

import UIKit

protocol TypesTableViewControllerDelegate: class {
  func typesController(controller: TypesTableViewController, didSelectTypes types: [String])
}

class TypesTableViewController: UITableViewController {

  let possibleTypesDictionary = ["bakery":"Bakery", "bar":"Bar", "cafe":"Cafe", "grocery_or_supermarket":"Supermarket", "restaurant":"Restaurant"]
  var selectedTypes: [String]!
  weak var delegate: TypesTableViewControllerDelegate!
  var sortedKeys: [String] {
    return possibleTypesDictionary.keys.sort()
  }

  // MARK: - Actions
  @IBAction func donePressed(sender: AnyObject) {
    delegate?.typesController(self, didSelectTypes: selectedTypes)
  }

  // MARK: - Table view data source
  override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return possibleTypesDictionary.count
  }

  override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("TypeCell", forIndexPath: indexPath) 
    let key = sortedKeys[indexPath.row]
    let type = possibleTypesDictionary[key]!
    cell.textLabel?.text = type
    cell.imageView?.image = UIImage(named: key)
    cell.accessoryType = (selectedTypes!).contains(key) ? .Checkmark : .None
    return cell
  }

  // MARK: - Table view delegate
  override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
    let key = sortedKeys[indexPath.row]
    if (selectedTypes!).contains(key) {
      selectedTypes = selectedTypes.filter({$0 != key})
    } else {
      selectedTypes.append(key)
    }

    tableView.reloadData()
  }
}

在这里,用户可以点击 tableView 的一个单元格,以便在下一个 viewController 上使用他喜欢的类型进行搜索,现在我需要构建一个类来做同样的事情,但是没有 tableview 而只有 6 个按钮在用户可以点击的 View 中(因此 viewController 只有 6 个不同的按钮可以点击)。问题是我不知道如何将哪些按钮已按下,哪些未按下,我不知道如何传递给下一个 viewController,我该如何构建此类?

这是另一个类中的函数,需要知道按下了什么按钮

func fetchNearbyPlaces(coordinate: CLLocationCoordinate2D) {

        mapView.clear()

        dataProvider.fetchPlacesNearCoordinate(coordinate, radius:searchRadius, types: searchedTypes) { places in
            for place: GooglePlace in places {

                let marker = PlaceMarker(place: place)

                marker.map = self.mapView

“类型:serchedTypes”在哪里

最佳答案

您想做的事称为委派,这是您的做法:

  1. 制作一个像这样的协议(protocol):

    protocol  TransferProtocol : class
    {
        func transferData(types:[String])
    }
    
  2. 使带有按钮的 View Controller 符合该协议(protocol),我喜欢通过向我的类添加扩展来做到这一点,如下所示:

    extension ButtonsViewController:TransferProtocol{
      func transferData(types:[String]){
      //Do whatever you want here
      }
    }
    
  3. 在您的 TableView Controller 类中声明一个变量,并将您创建的协议(protocol)作为其类型,这称为委托(delegate)

    weak var transferDelegate:TransferProtocol?
    
  4. 在您继续到按钮 View Controller 之前,您希望将该 View Controller 设置为您刚刚创建的委托(delegate),如下所示:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let vc = segue.destination as? ButtonsViewController
        transferDelegate = vc
        vc?.transferData(types: selected)
    
    }
    

如果操作正确,您应该能够使用您在 TableView Controller (TypesTableViewController) 中构建的数组

关于ios - swift, tableView selectedTypes 按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46445937/

相关文章:

ios - Xcode 8.3.3,链接框架与发布和调试版本

ios - 直接在应用程序中设置评分(Swift 3、iOS 10.3)

ios - 带有 UIImageView 的自定义 UITableViewCell 为最后一个提供了错误的大小

iphone - iPhone 和 ASP.NET WS (XML/JSON) 之间的身份验证

ios - 在 iOS 图标中插入应用名称 = 违反指南?

ios - SWIFT: "didBeginContact"函数中的 If 语句运行次数过多

ios - Xcode UITableView 放置和单元格分隔符

ios - 如何在 iOS TableView 中每行创建多个点击处理程序?

ios - 突然完全停止接收 firebase 通知

iphone - 在 TableView 中重用单元格会导致问题