我需要帮助,看这门课
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”在哪里
最佳答案
您想做的事称为委派,这是您的做法:
制作一个像这样的协议(protocol):
protocol TransferProtocol : class { func transferData(types:[String]) }
使带有按钮的 View Controller 符合该协议(protocol),我喜欢通过向我的类添加扩展来做到这一点,如下所示:
extension ButtonsViewController:TransferProtocol{ func transferData(types:[String]){ //Do whatever you want here } }
在您的 TableView Controller 类中声明一个变量,并将您创建的协议(protocol)作为其类型,这称为委托(delegate)
weak var transferDelegate:TransferProtocol?
在您继续到按钮 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/