2011-02-09 38 views
6

Tôi có một ứng dụng dựa trên điều hướng cho iPhone mà tôi đang làm việc cho phép người dùng xem lựa chọn từ một bảng, trên bản đồ. Tôi có chú thích xác định vị trí đã chọn của người dùng trên bản đồ. Theo hành vi bình thường, nếu người dùng nhấp vào chú thích, chú dẫn sẽ xuất hiện cùng với chi tiết về vị trí đó. Không có vấn đề ở đây.Cách tự động mở chú dẫn chú thích trên bản đồ, khi bản đồ tải lần đầu tiên?

Câu hỏi của tôi là, tôi muốn chú thích xuất hiện tự động từ chú thích, khi người dùng được đưa đến màn hình chứa bản đồ, để người dùng không phải nhấp vào chú thích để xem chi tiết về vị trí, nhưng tôi không chắc chắn cách thực hiện điều này. Tôi có phương pháp sau đây trong lớp học của tôi "MapViewController", trong đó phần lớn các công việc hiển thị bản đồ được thực hiện:

- (void)viewDidLoad { 

    [super viewDidLoad]; 
MKCoordinateRegion region; 
MKCoordinateSpan span; 

NavButtonAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
userCoord = delegate.userLocation.coordinate; 

region.center = userCoord; 
span.latitudeDelta = 0.4; 
span.longitudeDelta = 0.4; 
region.span = span; 

[mapView setMapType:MKMapTypeStandard]; 
[mapView setZoomEnabled:YES]; 
[mapView setScrollEnabled:YES]; 
mapView.showsUserLocation = YES; 
[mapView setRegion:region animated:YES]; 

RestaurantAnnotation *rAnnotation = [[RestaurantAnnotation alloc] init]; 
rAnnotation.title = restaurantObj.name; 
rAnnotation.subtitle = restaurantObj.address; 
rAnnotation.subtitle = [restaurantObj.address stringByAppendingFormat:@" %@", restaurantObj.hours]; 
rAnnotation.subtitle = [restaurantObj.address stringByAppendingFormat:@" %@", restaurantObj.phoneNumber]; 


CLLocationCoordinate2D newCoord = {restaurantObj.latitude, restaurantObj.longitude}; 
rAnnotation.coordinate = newCoord; 
[mapView addAnnotation:rAnnotation]; 

} 

Các MapViewController được gọi từ các phương pháp sau đây trên màn hình theo thời gian:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

Restaurant *rLocation = [restaurantList objectAtIndex:indexPath.row]; 

MapViewController *mapController = [[MapViewController alloc] initWithRestaurant:rLocation]; 
[self.navigationController pushViewController:mapController animated:YES]; 
[mapController release]; 
} 

Tôi nhận thấy rằng tôi phải sử dụng phương pháp sau đây để thực hiện việc này:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views 
{ 
    id<MKAnnotation> myAnnotation = [mapView.annotations objectAtIndex:0]; 
    [mapView selectAnnotation:myAnnotation animated:YES]; 
} 

Tuy nhiên, tôi không chắc chắn như thế nào. Tôi không có nhiều chú thích mà tôi đang sử dụng cùng một lúc, tôi chỉ có một chú thích mà tôi cần để làm việc này.

Tôi đặt phương thức này vào ứng dụng của mình ở đâu và tôi gọi nó từ đâu?
Tôi có gọi phương thức này từ phương thức viewDidLoad và đặt phương thức thực sự vào trong lớp MapViewController của tôi không?

Trả lời

12

Bạn phải thêm

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views { 
    id myAnnotation = [mapView.annotations objectAtIndex:0]; 
    [mapView selectAnnotation:myAnnotation animated:YES]; 
} 

đến lớp mà bạn đặt làm đại biểu cho MKMapView.

+0

Cảm ơn bạn rất nhiều vì đã trả lời nhanh chóng. Sau đó tôi có thể gọi phương thức từ phương thức viewDidLoad không? – syedfa

+0

Không, bạn không cần phải gọi trực tiếp. Nó sẽ tự động được gọi bởi mapview miễn là bạn thiết lập các đại biểu. – benwong

+1

Cảm ơn rất nhiều vì câu trả lời của bạn. Giải pháp của bạn đã hoạt động! Bảo trọng. – syedfa

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