0

私はiOSプログラミングに不慣れで、ViewController間でデータを渡すのに問題があります。

マップビューで注釈を地理コード化し、注釈ビューのタイトルとしてアドレスを設定するビューコントローラがあります。注釈ビューには、ラベルのあるスタックに別のビューをプッシュする呼び出しボタンがあり、ジオコーディングされた住所をラベルとして表示したいと思います。ここにいくつかのコードがあります:

これは私がピンを落とすところです:

-(void)press:(UILongPressGestureRecognizer *)recognizer
{
    CGPoint touchPoint = [recognizer locationInView:worldView];
    CLLocationCoordinate2D touchMapCoordinate = [worldView convertPoint:touchPoint toCoordinateFromView:worldView];

    geocoder = [[CLGeocoder alloc]init];
    CLLocation *location = [[CLLocation alloc]initWithCoordinate:touchMapCoordinate
                                                    altitude:CLLocationDistanceMax
                                          horizontalAccuracy:kCLLocationAccuracyBest
                                            verticalAccuracy:kCLLocationAccuracyBest
                                                   timestamp:[NSDate date]];
    [geocoder reverseGeocodeLocation:location
                   completionHandler:^(NSArray *placemarks, NSError *error) {
                       NSLog(@"reverseGeocoder:completionHandler: called");
                       if (error) {
                          NSLog(@"Geocoder failed with error: %@", error);
                       }
                       if (placemarks && placemarks.count > 0)
                       {
                           CLPlacemark *place = [placemarks objectAtIndex:0];
                           _address = [NSString stringWithFormat:@"%@ %@, %@ %@", [place subThoroughfare], [place thoroughfare], [place locality], [place administrativeArea]];

                           if (UIGestureRecognizerStateBegan == [recognizer state]) {
                               _addressPin = [[MapPoint alloc]initWithCoordinate:touchMapCoordinate
                                                                        title:_address];
                           [worldView addAnnotation:_addressPin];
                       }
                   }
               }];
}

アドレスを表示するビューのコードは次のとおりです。

#import <UIKit/UIKit.h>
@class MapPoint;

@interface PinViewController : UIViewController <UINavigationControllerDelegate,     UIImagePickerControllerDelegate,UITextFieldDelegate>

{
    __weak IBOutlet UILabel *addressLabel;
}

@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (strong, nonatomic) MapPoint *pin;

-(void)takePicture:(id)sender;
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

@end

#import "PinViewController.h"
#import "MapPoint.h"

@interface PinViewController ()

@end

@implementation PinViewController

@synthesize imageView, pin;
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [addressLabel setText:[pin title]];

}

MapPointクラスには、titleプロパティとsubtitleプロパティがあります。PinViewControllerがスタックの一番上にプッシュされると、ラベルのテキストをピンのタイトルに設定しようとしましたが、ラベルにテキストが表示されません。誰かが私を助けて、私が欠けているものを教えてもらえますか?あなたの助けは大歓迎です。

4

2 に答える 2

2

この質問では、より多くのコードブロックを共有する必要があります:)。代わりに、オブジェクト指向プログラムでのコミュニケーションについてもっと理解する必要があります

ビュークラス間でのデータの受け渡しに関する優れたチュートリアルをここで読むことができます

2つのビュー間でオブジェクトを渡すための最良の方法をここで読んでください

CommunicatingWithObjectsに関してDeveloper.appleで見つけた良いドキュメントがあります

また、ここで良いビデオを見ることができます

于 2012-10-17T06:12:08.753 に答える
1

ラベルのプロパティを作成し、callouttappedメソッドからラベルテキストを渡すだけです。

- (void)mapView:(MKMapView *)mapView annotationView:(MKPinAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {

    Details *det=[[Details alloc]init];
    det.label.text=annotation.title;
    [self.navigationController pushViewController:det animated:YES];
    [det release];
}
于 2012-10-17T06:29:50.920 に答える