여기 내 테이블 뷰 컨트롤러입니다. 클래스의 mapSearch 배열을 전달할 것이라고 선언했습니다.테이블 뷰에서 맵 뷰로 장소 배열 전달
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
let selectedMap = mapSearch[indexPath.row]
let mapviewDestination = MapViewController()
mapviewDestination.mapString = selectedMap
performSegueWithIdentifier("showDetails", sender: tableView)
}
다음은 내 mapViewController 코드입니다.
var mapString : String?
실제 검색.
var request = MKLocalSearchRequest()
request.naturalLanguageQuery = mapString
request.region = self.placeMap.region
var search:MKLocalSearch = MKLocalSearch.init(request: request)
search.startWithCompletionHandler {
(response:MKLocalSearchResponse!, error:NSError!) in
if !(error != nil) {
var placemarks:NSMutableArray = NSMutableArray()
for item in response.mapItems {
placemarks.addObject((item as MKMapItem).placemark)
}
self.placeMap.removeAnnotations(self.placeMap.annotations)
self.placeMap.showAnnotations(placemarks, animated: true)
} else {
}
}
내 문제는 내가 시뮬레이터를 실행할 때 mapString을 기반으로 검색하지 않는다는 것입니다.
모든 아이디어를 환영합니다!
편집 : 나는 이것과 행운을 시도하고있다
:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath)
tableView.deselectRowAtIndexPath(indexPath, animated: true)
let selectedMap = mapSearch[indexPath.row]
performSegueWithIdentifier("showDetails", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if segue.identifier == "showDetails" {
var mapController = segue.destinationViewController as MapViewController
mapController.mapString = mapSearch
}
}
prepareForSegue가 배열의 모든 값을 전송하지 않습니까? 선택한 tableview의 값을 mapView에 보내고 싶습니다. – Shack
'prepareForSegue'는 Segue를 사용하여 새로 푸시/제시된 뷰 컨트롤러의 맞춤 구성을 수행하기 위해 Apple에서 제공하는 메소드입니다. 일반적으로 식별자를 사용하여 Segue를 수행하고 새 View Controller에 대한 참조를 가져 와서 PrepForSegue를 구현 한 다음 사용자 정의 속성을 설정합니다. 그렇게하면 이미 설정된 모델로 푸시/표시됩니다. –
컨트롤러에 대한 참조가'didSelectRowAtIndexPath'의 끝에서 사라 지므로, 마치 MapViewController를 인스턴스화 할 수 없다는 것이 문제입니다. 실제로 mapString을 전달하고 있지만 구성된 전체보기 컨트롤러는 나중에 삭제됩니다. Segue가 View Controller를 인스턴스화하고'prepareForSegue'에서 설정을 처리하도록해야합니다. 희망이 도움이됩니다. –