![]() |
ClickHandler mehrmals benutzten?
Hallo,
ich versuche gerade, einen NavBarClickHandler mehrmals zu benutzten, was ja sehr sinnvoll ist. Wenn ich jetzt z.B. auf einem ViewController 2 Buttons in der Leiste hab, dann will ich ja nicht extra 2 Klassen schreiben, sondern lieber sowas machen:
Delphi-Quellcode:
Beim Kreieren setzt ich dann das FKind. Beim Klicken führt er dann abhängig von FKind eine Funtkion aus. Nur leider ist das Attribut entweder 0 oder ein zufällig Zahl.
type
IUINavBarClickHandler = interface(NSObject) ['{6D8473BD-461C-479D-ADF6-59F933EDA57B}'] procedure Click; cdecl; end; TUINavBarClickHandler = class(TOCLocal) private FKind: Integer; protected function GetObjectiveCClass: PTypeInfo; override; public procedure Click; cdecl; end; Warum kann ich das so nicht machen? Hat jemand eine Lösung für mein Problem? Viele Grüße Croco |
AW: ClickHandler mehrmals benutzten?
Dein TUINavBarClickHandler implementiert wirklich nicht das Inferface IUINavBarClickHandler?
Zitat:
Zitat:
|
AW: ClickHandler mehrmals benutzten?
Ich hab mir das ganze von TMS abgeguckt (aus TMSNativeUIToolbar). Dort steht folgendens:
Delphi-Quellcode:
und das Kreieren:
{$IFDEF IOS}
IUIToolBarEventHandler = interface(NSObject) ['{1ACF3DFA-A90B-4F06-ACF1-8A40076BC9ED}'] procedure Click(Sender: Pointer); cdecl; end; TUIToolBarEventHandler = class(TOCLocal) private FControl: TTMSFMXNativeUIToolBar; protected function GetObjectiveCClass: PTypeInfo; override; public //IUIToolBarEventHandler procedure Click(Sender: Pointer); cdecl; end; {$ENDIF}
Delphi-Quellcode:
Dachte ich kann das gleiche mit einem Integer machen, aber scheinbar war der Gedanke falsch
FToolBarEventHandler := TUIToolBarEventHandler.Create;
FToolBarEventHandler.FControl := Self; Meine Anwendung für das Ding sieht so aus:
Delphi-Quellcode:
ToolbarItem1:= FMX.TMSNativeUICore.TUIBarButtonItem.Create;
ToolBarClickHandler:= TUIToolBarClickHandler.Create; ToolBarClickHandler.FKind:= 2; ToolbarItem1.initWithBarButtonSystemItem(UIBarButtonSystemItemRefresh, ToolBarClickHandler.GetObjectID, sel_getUid('Click')); bis[0]:= (ToolbarItem1 as ILocalObject).GetObjectID; arr:= TNSArray.Wrap(TNSArray.OCClass.arrayWithObjects(@bis[0], Length(bis))); VPlanView.ViewController.navigationItem.setRightBarButtonItems(arr); |
AW: ClickHandler mehrmals benutzten?
Geb der Instanz doch eine anonyme Methode mit, dann hast etwas Universelles
|
AW: ClickHandler mehrmals benutzten?
Was dann so aussehen würde?
Delphi-Quellcode:
type
IUIToolbarClickHandler = interface(NSObject) ['{6D8473BD-461C-479D-ADF6-59F933EDA57B}'] procedure Click; cdecl; end; THandlerProc = reference to procedure; TUIToolBarClickHandler = class(TOCLocal) private FMyProc: THandlerProc; protected function GetObjectiveCClass: PTypeInfo; override; public procedure Click; cdecl; end; function TUIToolBarClickHandler.GetObjectiveCClass; begin Result:= TypeInfo(IUIToolbarClickHandler); end; procedure TUIToolBarClickHandler.Click; begin FMyProc; end; |
AW: ClickHandler mehrmals benutzten?
Jo, obwohl, so ist es schöner zu benutzen
Delphi-Quellcode:
und dann nur noch
type
IUIToolbarClickHandler = interface(NSObject) ['{6D8473BD-461C-479D-ADF6-59F933EDA57B}'] procedure Click; cdecl; end; THandlerProc = reference to procedure; TUIToolBarClickHandler = class(TOCLocal) private FHandler: THandlerProc; protected function GetObjectiveCClass: PTypeInfo; override; constructor Create( Handler : THandlerProc ); public class function Construct( Handler : THandlerProc ) : IUIToolbarClickHandler; procedure Click; cdecl; end; class function TUIToolBarClickHandler.Construct( AHandler : THandlerProc ) : IUIToolbarClickHandler; begin Result := Self.Create( AHandler ); end; constructor TUIToolBarClickHandler.Create( AHandler : THandlerProc ); begin inherited Create; FHandler := AHandler; end; function TUIToolBarClickHandler.GetObjectiveCClass; begin Result:= TypeInfo(IUIToolbarClickHandler); end; procedure TUIToolBarClickHandler.Click; begin if Assigned( FHandler ) then FHandler(); // mit Klammern ist auf jeden Fall die procedure gemeint und nicht der Variablenwert ;o) end;
Delphi-Quellcode:
var
HelloWorldHandler : IUIToolbarClickHandler; HelloWorldHandler := TUIToolBarClickHandler.Construct( procedure begin ShowMessage( 'Hello World' ); end ); |
AW: ClickHandler mehrmals benutzten?
Sobald ich das dann in sowas hier rein packe und das ToolbarItem klicke, ist das Attribut null (bzw assigned = false) :(
Delphi-Quellcode:
ToolbarItem:= TUIBarButtonItem.Create;
ToolBarClickHandler := TUIToolBarClickHandler.Construct( procedure begin showmessage('Test'); end ); ToolbarItem.initWithBarButtonSystemItem(UIBarButtonSystemItemRefresh, ToolBarClickHandler.GetObjectID, sel_getUid('Click')); VPlanView.ViewController.navigationItem.setRightBarButtonItem(ToolbarItem,false); |
AW: ClickHandler mehrmals benutzten?
Es funktioniert doch...der Handler muss nur ein Attribut von der Klasse sein (-> FToolBarClickHandler)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz