AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung iOS UIAlertViewDelegate und anonyme Mehtoden
Thema durchsuchen
Ansicht
Themen-Optionen

UIAlertViewDelegate und anonyme Mehtoden

Ein Thema von Crocotronic · begonnen am 16. Mär 2014 · letzter Beitrag vom 16. Mär 2014
Antwort Antwort
Crocotronic

Registriert seit: 9. Mai 2013
258 Beiträge
 
#1

UIAlertViewDelegate und anonyme Mehtoden

  Alt 16. Mär 2014, 15:29
Hallo,
ich kämpfe gerade mit dem UIAlertViewDelegate. Um die Klasse so universell wie möglich zu halten, habe ich mir gedacht, dass ich dem Delegate eine anonyme Methode mitgebe.
Hier die Klasse:
Delphi-Quellcode:
  TAlertHandlerProc = reference to procedure(alertView: UIAlertView;
    clickedButtonAtIndex: NSInteger);

  TAlertViewDelegate = class(TOCLocal, UIAlertViewDelegate)
  private
   FHandler: TAlertHandlerProc;
  protected
   constructor Create(AHandler: TAlertHandlerProc);
  public
   class function Construct(AHandler: TAlertHandlerProc): TAlertViewDelegate;
   procedure alertView(alertView: UIAlertView; clickedButtonAtIndex: NSInteger); cdecl;
   procedure alertViewCancel(alertView: UIAlertView); cdecl;
  end;

class function TAlertViewDelegate.Construct(
  AHandler: TAlertHandlerProc): TAlertViewDelegate;
begin
 Result:= Self.Create(AHandler);
end;

constructor TAlertViewDelegate.Create(AHandler: TAlertHandlerProc);
begin
 inherited Create;
 FHandler:= AHandler;
end;

procedure TAlertViewDelegate.alertView(alertView: UIAlertView;
  clickedButtonAtIndex: NSInteger);
begin
 if Assigned(FHandler) then
  FHandler(alertView, clickedButtonAtIndex);
end;

procedure TAlertViewDelegate.alertViewCancel(alertView: UIAlertView);
begin
end;
Die Anwendung sieht folgendermaßen aus:
Delphi-Quellcode:
var alert: UIAlertView;
    alertTextField: UITextField;
    AlertDelegate: TAlertViewDelegate;
begin
 AlertDelegate:= TAlertViewDelegate.Construct(
  procedure(alertView: UIAlertView; clickedButtonAtIndex: NSInteger)
  var InputText: String;
  begin
   InputText:= NSSTRToString(TNSString.Wrap(TUITextField.Wrap(alertView.textFieldAtIndex(0)).Text));
   if not Empty(InputText) then
    FController.Test(InputText);
  end);

 alert:= TUIAlertView.Create;
 alert.setTitle(NSStr('MsgBos'));
 alert.setMessage(NSStr('Test'));
 alert.setAlertViewStyle(UIAlertViewStylePlainTextInput);
 alert.setCancelButtonIndex(alert.addButtonWithTitle(NSStr('OK')));
 alert.setCancelButtonIndex(alert.addButtonWithTitle(NSStr('Abbrechen')));
 alert.setDelegate(AlertDelegate.GetObjectID);
 alert.show;
 alert.release;
Wenn ich dann die MessageBox schließe, schmiert die App ab. Wenn der Inhalt von der anonymen Methode aber direkt im alertView() steht, funktioniert alles einwandfrei.

Irgendwelche Ideen?

Viele Grüße
Croco
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: UIAlertViewDelegate und anonyme Mehtoden

  Alt 16. Mär 2014, 19:44
Weak?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Crocotronic

Registriert seit: 9. Mai 2013
258 Beiträge
 
#3

AW: UIAlertViewDelegate und anonyme Mehtoden

  Alt 16. Mär 2014, 20:11
Speicher die Delegates jetzt einfach in einem Array in der Klasse, danke für den Hinweis!

Geändert von Crocotronic (16. Mär 2014 um 20:56 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz