问题描述
我尝试在GoogleMaps插件上实现2个委托,但没有找到在同一类上传递2个委托的方法!只有一个人代替这个地方!
第一位代表:
@NativeClass
class MapViewDelegateImpl extends NSObject implements GMSMapViewDelegate {
public static ObjCProtocols = [GMSMapViewDelegate];
private _owner: WeakRef<MapView>;
public static initWithOwner(owner: WeakRef<MapView>): MapViewDelegateImpl {
let handler = <MapViewDelegateImpl>MapViewDelegateImpl.new();
handler._owner = owner;
return handler;
}
...
}
第二位代表
@NativeClass
class MapVCDelegateImpl extends NSObject implements CLLocationManagerDelegate
{
public static ObjCProtocols = [CLLocationManagerDelegate];
private _owner: WeakRef<MapView>;
public lm: CLLocationManager = new CLLocationManager();
public static initWithOwner(owner: WeakRef<MapView>): MapVCDelegateImpl {
let handler = <MapVCDelegateImpl>MapVCDelegateImpl.new();
handler._owner = owner;
return handler;
}
...
}
主类:
export class MapView extends MapViewBase {
protected _markers: Array<Marker> = new Array<Marker>();
public _delegate: MapViewDelegateImpl;
private _indoorDelegate:IndoordisplayDelegateImpl;
private _mapVCDelegate:MapVCDelegateImpl;
constructor() {
super();
this.nativeView = GMSMapView.mapWithFrameCamera(CGRectZero,this._createCameraPosition());
this._delegate = MapViewDelegateImpl.initWithOwner(new WeakRef(this));
this._indoorDelegate = IndoordisplayDelegateImpl.initWithOwner(new WeakRef(this));
//this._mapVCDelegate = MapVCDelegateImpl.initWithOwner(new WeakRef(this));
this.updatePadding();
}
public onLoaded() {
super.onLoaded();
this.nativeView.delegate = this._delegate;
this.nativeView.indoordisplay.delegate = this._indoorDelegate;
this.notifyMapReady();
}
...
}
我已经尝试过几种思考,例如在_delegate
类上设置MapView
public _delegate:[MapViewDelegateImpl,MapVCDelegateImpl];
// then on onLoad
constructor() {
super();
this.nativeView = GMSMapView.mapWithFrameCamera(CGRectZero,this._createCameraPosition());
this._delegate = [
MapViewDelegateImpl.initWithOwner(new WeakRef(this)),MapVCDelegateImpl.initWithOwner(new WeakRef(this))
];
...
}
public onLoaded() {
super.onLoaded();
this.nativeView.delegate = this._delegate;
this.nativeView.indoordisplay.delegate = this._indoorDelegate;
this.notifyMapReady();
}
我也试图像这样在同一委托人上实现MapViewDelegateImpl
和MapVCDelegateImpl
,但是它不起作用
class MapViewDelegateImpl extends NSObject implements GMSMapViewDelegate,CLLocationManagerDelegate {
public static ObjCProtocols = [GMSMapViewDelegate,CLLocationManagerDelegate];
private _owner: WeakRef<MapView>;
public static initWithOwner(owner: WeakRef<MapView>): MapViewDelegateImpl {
let handler = <MapViewDelegateImpl>MapViewDelegateImpl.new();
handler._owner = owner;
return handler;
}
// here implements the methods of tow class...
}
如果在技术上可行的话,可以给我打电话吗?
谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)