【发布时间】:2018-06-26 12:28:51
【问题描述】:
我希望开关控制用户的跟踪记录,但我的开关在 secondView 上。是否需要发送通知或使用协议委托?
第一视图
class MapViewController: UIViewController {
@IBOutlet weak var mainMapView: MKMapView!
func drawRoute(locationArray: [CLLocation]) {
if locationArray.count > 1 {
let destinationLocIndex = (locationArray.count) - 1
let startLocIndex = (locationArray.count) - 2
let destinationloc = locationArray[destinationLocIndex].coordinate
let startLoc = locationArray[startLocIndex].coordinate
let routeArray = [startLoc, destinationloc]
let geodesicLine = MKGeodesicPolyline(coordinates: routeArray, count: routeArray.count)
mainMapView.add(geodesicLine, level: .aboveRoads)
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
// show current user's location
setLocation(nowlocation: locations.last!)
//I want to control it from the switch on the second page
drawRoute(locationArray: userLocation)
}
}
秒视图
class SencodTableViewController: UITableViewController {
@IBAction func drawRouteSwitch(_ sender: UISwitch) {
if sender.isOn == true {
} else {
}
}
我想从第二个页面切换控制drawRoute func,怎么做?
【问题讨论】:
-
您需要使用协议代表来“听到”交换机引发的事件。在这种情况下你不应该使用通知,这就是委托的设计目的,发送事件/消息/foo。
-
你能用代码演示一下吗?
-
而不是仅仅解决手头的问题。你应该明白。使用代表。你可以阅读如何在swiftwithsadiq.wordpress.com/2017/07/20/delegate-in-swift