2013-04-22 2 views
0

Я почти последовал за этим post. Контроллер просмотра будет двигаться через раскадровку. Вот соответствующий код:
ViewController.m:Передача данных-карт между ViewController

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 
{ 
    NSLog(@"%@", view.annotation.title); 
    MapPoint *annView = view.annotation; 
    DetailViewController *dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; 
    dvc.title = @"my own Details"; 
    dvc.titleTMP = annView.title; 
    dvc.subtitleTMP = annView.subtitle; 

    [self.navigationController pushViewController:dvc animated:YES]; 
} 

MapPoint.h:

@interface MapPoint : NSObject <MKAnnotation> 
{ 
    NSString *_title; 
    NSString *_subtitle; 
    CLLocationCoordinate2D _coordinate; 
    UIImage *_storeImage; 
} 

@property (copy) NSString *title; 
@property (copy) NSString *subtitle; 
@property (nonatomic, readonly) UIImage *storeImage; 
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 


- (id)initWithTitle:(NSString*)title subtitle:(NSString*)subtitle coordinate:(CLLocationCoordinate2D)coordinate storeImage:(UIImage*)storeImage; 

и DetailViewController:

@interface DetailViewController : UIViewController 
@property (strong, nonatomic) IBOutlet UIImageView *branchImage; 
@property (strong, nonatomic) IBOutlet UILabel *titleLabel; 
@property (strong, nonatomic) IBOutlet UITextView *textView; 

Я думаю, что моя ошибка находится в calloutAccessoryControlTapped метод но я не знаю, какова реальная причина этой проблемы.

ответ

0

Я решил это, подумав о последовательности загрузки.
Все, что нужно сделать, это создать временные

@ свойств
@interface DetailViewController : UIViewController 
@property (strong, nonatomic) IBOutlet UIImageView *branchImage; 
@property (strong, nonatomic) IBOutlet UILabel *titleLabel; 
@property (strong, nonatomic) IBOutlet UITextView *textView; 
@property (nonatomic) NSString *titleTMP;  //added 
@property (nonatomic) NSString *subtitleTMP;  //added 

и сделать

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 
{ 
    NSLog(@"%@", view.annotation.title); 
    MapPoint *annView = view.annotation; 
    DetailViewController *dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; 
    dvc.title = @"my own Details"; 
    dvc.titleTMP = annView.title; 
    dvc.subtitleTMP = annView.subtitle; 

    [self.navigationController pushViewController:dvc animated:YES]; 
} 

DetailViewController:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    titleLabel.text = titleTMP; 
    textView.text = subtitleTMP; 

} 
1

Если вы используете раскадровку, можно использовать метод prepareForSegue и установить в класс, аналогично тому, как вы это сделали.

я отправляю часть кода

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 

if([segue.identifier isEqualToString:@"Brs"]){ 
    NSLog(@"segue %@ ",[segue identifier]); 
    [segue.destinationViewController setPath:[ris_xml objectAtIndex:index_post-1] ]; 
    } 
} 

В этом примере я установил атрибут «Path» следующего UIViewController только тогда, когда его идентификатор «Brs». Для использования этого метода необходимо установить идентификатор UIviewController в правую панель раскадровки. Использование этого не требуется для создания нового UIViewController, если у вас есть это в раскадровке.

Смежные вопросы