내에서 ViewController
나는 이전에 선택한 클럽의 이름을 표시하는 레이블이 ViewController
. 이제 parse.com 클래스에서 쿼리를 생성하여 레이블로 표시된 클럽 이름과 일치하는 객체의 모든 정보를 검색해야합니다. 구문 분석을 성공적으로 수행하는 방법을 알고 있지만 이전보기에서 선택한 클럽에 따라 레이블 문자열이 다를 수 있으므로 레이블 문자열과 쿼리를 일치시키는 방법을 찾기가 어렵습니다.
암호:
import UIKit
import Parse
class MenuController: UIViewController {
@IBOutlet weak var clubLabel: UILabel!
var clubName = String()
override func viewDidLoad() {
super.viewDidLoad()
clubLabel.text = clubName
}
}
이전보기는 이미 다음과 같은 클럽 주석으로 맵을 채우기 위해 구문 분석을 요청했습니다.
let annotationQuery = PFQuery(className: "Clubs")
annotationQuery.findObjectsInBackgroundWithBlock{
(clubs, error) -> Void in
if error == nil {
// The find succeeded.
print("Successful query for annotations")
// Do something with the found objects
let myClubs = clubs! as [PFObject]
for club in myClubs {
//data for annotation
let annotation = MKPointAnnotation()
let place = club["location"] as? PFGeoPoint
let clubName = club["clubName"] as? String
let stadiumName = club["stadium"] as? String
annotation.title = clubName
annotation.subtitle = stadiumName
annotation.coordinate = CLLocationCoordinate2DMake(place!.latitude,place!.longitude)
//add annotations
self.mapView.addAnnotation(annotation)
default를 사용하는 대신 MKPointAnnotation
이해하기 쉽도록 맞춤 주석을 사용합니다.
먼저 다른 파일에 프로토콜을 ClubAnnotation
따르는 클래스를 생성 MKAnnotation
합니다.
import UIKit
import MapKit
import Parse
class ClubAnnotation: NSObject, MKAnnotation {
//MARK: - Instance properties
let club:PFObject
//MARK: - Init methods
init(club:PFObject) {
self.club = club
}
//MARK: - MKAnnotation protocol conformance
var title: String? { get {
return club["clubName"]
}
}
var subtitle: String? { get {
club["stadium"]
}
}
var coordinate: CLLocationCoordinate2D { get {
return CLLocationCoordinate2D(latitude: club["location"].latitude, longitude: club["location"].longitude)
}
}
}
클럽 개체에 대해 "경기장", "클럽 이름"또는 "위치"필드가 비어있는 경우 오류를 처리 할 수 있으므로 표시 방법을 결정할 수 있습니다.
그런 다음 MKMapView
객체를 포함하고 MKMapViewDelegate
프로토콜을 준수하는 클래스에서 쿼리 결과 처리를 바꿉니다.
let annotationQuery = PFQuery(className: "Clubs")
annotationQuery.findObjectsInBackgroundWithBlock{
(clubs, error) -> Void in
if let clubs = clubs where error == nil {
// The find succeeded.
print("Successful query for annotations")
for club in clubs {
self.mapView.addAnnotation(ClubAnnotation(club:club))
}
} else {
// Handle the error
}
}
당신은 내가 수동으로 설정할 필요가 없습니다 실현 title
, subtitle
그리고 coordinate
속성 당신 때문에 ClubAnnotation
객체를 반환 직접적의 그것의 구현에 따라 MKAnnotation
프로토콜입니다.
여전히이 클래스에 selectedClub
속성을 추가 합니다. 이 속성은 선택한 주석에서 클럽을 저장하는 데 사용되며 푸시 된 뷰 컨트롤러로 전달됩니다.
var selectedClub:PFobject!
당신의에서 calloutAccessoryControlTapped
위임 방법, 당신은 후 주석에서 PFObject를 얻을 수 있으며, 구문 분석에서를 조회 할 필요없이, 당신이 그것으로 원하는 모든 일의 새로운의 ViewController에 전달 :
func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
mapView.deselectAnnotation(view.annotation, animated: true)
if let annotation = view.annotation as? ClubAnnotation {
clubSelected = annotation.club
}
}
이제 사용자 지정 주석 클래스에서 클럽 개체를 저장했으며 이에 대한 참조가 있습니다. 이 클럽에 대한 자세한 정보가 포함 된 새 뷰 컨트롤러를 표시하거나 푸시 prepareForSegue
하려면이 값을 재정의 하고 푸시 된 / 표시된 뷰 컨트롤러로 설정하면됩니다. 클럽의 다른 필드는 모두 Parse 요청에 따라로드되므로 쿼리 할 필요가 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다