0

我在IOS中遇到了在不同类之间传递属性的问题......所以问题如下:

我有一个名为 GMDraggableMarkerManager 的类,它允许我拖动标记。我想要做的就是获取这个标记的最终坐标,但是我无法将属性传递给我想将这些坐标用作圆心的 ViewController。

在 GMDraggableMarkerManager 的标头中,我声明了一个属性(在实现文件中,它在需要的地方获取坐标,我什至在模拟器上运行应用程序时在控制台中看到它们):

@property (assign, nonatomic, readwrite) CLLocationCoordinate2D markerPosition;

在 View Controller 的头文件中,我导入了这个 hedaer 文件,但它没有看到它......所以,我不能这样写代码:

CLLocationCoordinate2D circleCenter = _markerPosition; //也只使用了markerPosition。

我得到的错误是“使用未声明的标识符'markerPosition'。

我知道这应该非常愚蠢且易于解决,但我只是不明白我应该做什么?如果委托或协议,那么如何?

4

2 回答 2

0

您需要将包含标记的类的实例传递给将使用它的类...通常在被调用的类中,您声明一个指向父类的属性,如下所示:

    @class QRSMTagView;

     @interface QRSMFieldEditVC : UIViewController <UITextFieldDelegate, UITextViewDelegate>

    @property (nonatomic, strong) QRSMTagView *parent;

在您的方法文件中,您可以将标记称为

    parent.marker 

不用说你合成父文件并复制头文件。

于 2014-05-01T20:44:41.223 回答
0

一种方法是使用委托模式。简而言之...

// GMDraggableMarkerManager.h
@protocol GMDraggableMarkerManagerDelegate;

@property(weak,nonatomic) id<GMDraggableMarkerManagerDelegate>delegate;

@protocol GMDraggableMarkerManagerDelegate <NSObject>
- (void)gMDraggableMarkerManager:(GMDraggableMarkerManager *)dmm didFinishDraggingAt:(CLLocationCoordinate2D)coord;
@end

// GMDraggableMarkerManager.m

    // somewhere in here, after dragging is complete
    // the last coordinate is coord
    [self.delegate gMDraggableMarkerManager:self didFinishDraggingAt:coord];

最重要的是,没有人可以从可拖动标记管理器中获取最后拖动坐标的值。它有一个委托,它声明它有责任通知它的委托有关拖动的完成。

现在您只需要将视图控制器设置为委托。

// in ViewController.m

#import "GMDraggableMarkerManager.h"

@interface ViewController () <GMDraggableMarkerManagerDelegate>
// ...
@end

@implementation ViewController

// not sure how you get a handle to the GMDraggableMarkerManager
// maybe you create it here?

// however you get it...
GMDraggableMarkerManager *dmm = // however
dmm.delegate = self;

最后,实现委托方法(因为您正确声明了所有内容,编译器会警告您如果找不到方法,您声称要实现协议)。

- (void)gMDraggableMarkerManager:(GMDraggableMarkerManager *)dmm didFinishDraggingAt:(CLLocationCoordinate2D)coord {

    NSLog(@"ta-da %f,%f", coord.latitude, coord.longitude);
}
于 2014-05-01T20:54:43.193 回答