我需要帮助,请参阅此课程
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个按钮在用户可以点击的视图中(所以只有6个不同按钮的viewController可以点击)。问题是我不知道如何传递给下一个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
其中是“types:serchedTypes”
答案 0 :(得分:0)
你想做什么被称为委托这里是你如何做到的:
像这样制作一个协议:
protocol TransferProtocol : class
{
func transferData(types:[String])
}
使用符合按钮使视图控制器符合该协议,我喜欢通过向我的类添加扩展来实现,如下所示:
extension ButtonsViewController:TransferProtocol{
func transferData(types:[String]){
//Do whatever you want here
}
}
使用您创建的协议作为其类型在Table View Controller类中声明一个变量,这称为委托
weak var transferDelegate:TransferProtocol?
在 segue 到按钮视图控制器之前,您希望将该视图控制器设置为您刚刚创建的委托:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let vc = segue.destination as? ButtonsViewController
transferDelegate = vc
vc?.transferData(types: selected)
}
如果操作正确,您应该能够使用在表视图控制器(TypesTableViewController)中构建的数组