2013-02-11 28 views
8

Tôi muốn chuyển đổi chế độ xem khi một DetailDisclosure được nhấp vào bản đồ tôi đang hiển thị. mã hiện tại của tôi là như sau:MKAnnotationView Nhấn để xem bộ điều khiển khi nút DetailsDesclosure được nhấp vào

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
calloutAccessoryControlTapped:(UIControl *)control 
{ 
    DetailViewController *detailViewController = [[DetailViewController alloc] 
    initWithNibName:@"DetailViewController" bundle:nil]; 
    detailViewController.title = dictionary[@"placeLatitude"] 
    [self.navigationController pushViewController:detailViewController animated:YES]; 
} 

tôi có thể đẩy tới bộ điều khiển xem với điều này, nhưng tôi đã không tìm ra cách để buộc nó để kéo chi tiết từ các mảng JSON được sử dụng để tạo ra các bản đồ trong lần đầu tiên địa điểm. Tôi đang kéo dữ liệu như thế này để tạo bản đồ:

for (NSDictionary *dictionary in array) 
{ 
    // retrieve latitude and longitude from the dictionary entry 

    location.latitude = [dictionary[@"placeLatitude"] doubleValue]; 
    location.longitude = [dictionary[@"placeLongitude"] doubleValue]; 

    //CAN I LOAD THE TITLE/ID OF THE LOCATION HERE? 

Tôi biết tôi là một mục tiêu nhỏ. Có lẽ chỉ là một cú đá đúng hướng có thể giúp đỡ. Cảm ơn bạn!

Trả lời

11

Nếu bạn đang sử dụng bảng phân cảnh và có khoảng cách từ cảnh hiện tại đến cảnh đích, bạn chỉ có thể trả lời calloutAccessoryControlTapped. Ví dụ:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 
{ 
    [self performSegueWithIdentifier:@"Details" sender:view]; 
} 

Rõ ràng, bạn có thể kiểm tra các loại chú thích liên quan đến view rằng, vv, nếu bạn có segues khác nhau mà bạn muốn gọi cho các loại chú thích khác nhau.

Và, tất nhiên, nếu bạn muốn chuyển bất kỳ thông tin nào đến cảnh tiếp theo đó theo số prepareForSegue như bình thường.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"Details"]) 
    { 
     MKAnnotationView *annotationView = sender; 
     [segue.destinationViewController setAnnotation:annotationView.annotation]; 
    } 
} 

Như bạn thấy, tôi vượt qua các đối tượng annotation để xem tiếp theo của tôi. Nếu bạn có các trường bổ sung trong cấu trúc JSON được liên kết với mỗi chú thích, một giải pháp dễ dàng là thêm thuộc tính vào chế độ xem tùy chỉnh được liên kết cho từng trường bạn muốn theo dõi. Chỉ cần đi đến .h cho lớp tùy chỉnh chú thích của bạn và thêm các thuộc tính bạn cần. Và sau đó khi bạn tạo chú thích tùy chỉnh của mình (để được thêm vào bản đồ), bạn cũng chỉ cần đặt các thuộc tính này. Sau đó, khi bạn chuyển chú thích này đến bộ điều khiển xem tiếp theo, tất cả các thuộc tính mong muốn của bạn sẽ có sẵn ở đó.


Rõ ràng, nếu bạn đang sử dụng ngòi, chỉ cần làm các khoản tương đương NIB của bất cứ điều gì bạn muốn cho instantiating bộ điều khiển xem tiếp theo, thiết lập bất cứ điều gì thuộc tính mà bạn muốn, và một trong hai đẩy để nó hoặc trình bày nó modally, ví dụ như:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 
{ 
    DetailsViewController *controller = [[DetailsViewController alloc] initWithNibName:nil 
                       bundle:nil]; 
    controller.annotation = annotationView.annotation; 
    [self.navigationController pushViewController:controller animated:YES]; // or use presentViewController if you're using modals 
} 
+0

Cảm ơn Rob, tôi có cần sử dụng bảng phân cảnh để có Phân đoạn không? – Brandon

+0

k bị bệnh nhìn vào nó. Như mọi khi - BẠN ROCK – Brandon

+0

Vậy làm cách nào để truy cập vào các trường trên chế độ xem mới? Tôi đang cố gắng thực hiện điều tương tự trong ứng dụng của mình. –

Các vấn đề liên quan