如何使用Delphi / FMX覆盖本机 UIViewController 的委托方法,例如 viewDidLoad ?
谢谢!
答案 0 :(得分:1)
例如bannerViewWillLoadAd(对于带有UIViewController的viewDidLoad,原理是相同的):
ADBannerViewDelegate = interface(IObjectiveC)
['{95249262-9E7D-4841-B8E4-9EBBDADF3485}']
procedure bannerView(banner: ADBannerView; didFailToReceiveAdWithError: NSError); cdecl;
procedure bannerViewActionDidFinish(banner: ADBannerView); cdecl;
function bannerViewActionShouldBegin(banner: ADBannerView; willLeaveApplication: Boolean): Boolean; cdecl;
procedure bannerViewDidLoadAd(banner: ADBannerView); cdecl;
procedure bannerViewWillLoadAd(banner: ADBannerView); cdecl;
end;
TiOSBannerAdDelegate = class(TOCLocal, ADBannerViewDelegate)
private
[weak]FAd : TiOSBannerAd;
public
procedure SetAd(Ad: TiOSBannerAd);
procedure bannerView(banner: ADBannerView; didFailToReceiveAdWithError: NSError); cdecl;
procedure bannerViewActionDidFinish(banner: ADBannerView); cdecl;
function bannerViewActionShouldBegin(banner: ADBannerView; willLeaveApplication: Boolean): Boolean; cdecl;
procedure bannerViewDidLoadAd(banner: ADBannerView); cdecl;
procedure bannerViewWillLoadAd(banner: ADBannerView); cdecl;
end;
procedure TiOSBannerAdDelegate.bannerViewDidLoadAd(banner: ADBannerView);
begin
if (FAd <> nil) and (FAd.FAdControl <> nil) then
FAd.FAdControl.DoDidLoad;
end;
TiOSBannerAd = class(TInterfacedObject, IBannerAd)
private
FAd: ADBannerView;
FAdControl: TCustomBannerAd;
FDelegate: TiOSBannerAdDelegate;
FOrientationChangedId: Integer;
procedure OrientationChangedHandler(const Sender: TObject; const Msg: TMessage);
public
constructor Create;
destructor Free;
{ ICommonAd }
procedure CancelAction;
function IsActionInProgress: Boolean;
function IsLoaded: Boolean;
function GetAdUnitID: string;
procedure SetAdUnitID(const Value: string);
procedure LoadAd;
{ IBannerAd }
procedure SetBannerAdControl(const AValue: TCustomBannerAd);
function GetParent: TFmxObject;
function GetVisible: Boolean;
procedure Show;
procedure Hide;
procedure UpdateControlMetrics;
procedure UpdateContentFromControl;
end;
procedure TiOSBannerAd.SetBannerAdControl(const AValue: TCustomBannerAd);
var
SizesArray: NSMutableArray;
SizesSet: NSSet;
begin
FAdControl := AValue;
if FAdControl <> nil then
begin
FAd := TADBannerView.Create;
FDelegate := TiOSBannerAdDelegate.Create;
FDelegate.SetAd(Self);
FAd.setDelegate(FDelegate.GetObjectID);
SizesArray := TNSMutableArray.Create;
SizesArray.addObject((ADBannerContentSizeIdentifierLandscape as ILocalObject).GetObjectID);
SizesArray.addObject((ADBannerContentSizeIdentifierPortrait as ILocalObject).GetObjectID);
SizesSet := TNSSet.Wrap(TNSSet.OCClass.setWithArray(SizesArray));
SizesArray.release;
FAd.setRequiredContentSizeIdentifiers(SizesSet);
UpdateControlMetrics
end
else
begin
FAd.setDelegate(nil);
FAd.release;
FAd := nil;
FDelegate := nil;
end;
end;