如何为我的应用程序创建自定义键盘

时间:2015-05-20 18:57:11

标签: delphi ios8 firemonkey delphi-xe7

我需要为我的(并且只有我的)iOS8应用程序中的某些TEdit创建自定义键盘。其他编辑需要默认的iPad键盘。

在Objective-C中看起来很简单 - 只需创建UIView并将其分配给myTextField.inputView(SOCP Solver Error for fPortoflio using solveRsocp)。

我怎么能在FMX(Delphi XE7)中做到这一点?

更新。 在iOSapi.UIKit.pas中声明的UITextField及其相应的控件是FMX.Edit.iOS.pas中的TiOSNativeEdit。 在TEdit中,它在PresentationProxy属性中使用,但仅在ControlType = Platform 时使用。 例如:

var
  intf: UITextField;
begin
  if edit1.PresentationProxy.HasNativeObject
    and (edit1.PresentationProxy.NativeObject.QueryInterface(UITextField, intf) = S_OK) then
    edit1.Text := 'Success'
  else
    edit1.Text := 'Failed';

获得UITextField界面后(我认为)你可以这样做:

intf.setInputView(myCreatedUIView);

但是...我使用样式控件,所以这种方法不适合我。

所以我必须使用TFrame,TLayout等模拟键盘......

1 个答案:

答案 0 :(得分:1)

在分析FMX的源代码后,我找到了一个解决方案(仅适用于IOS)。不幸的是,在这里包含它太大了......

简而言之:您必须使用SupportedKeyboardTypes 然后您可以选择使用键盘,但会丢失系统键盘,键盘工具栏以及与之交互的标准机制。

所以,我创建了小键盘和字母键盘并使用它们。

我的源代码:custom keyboard for iOS

如何使用:在项目中包含uCommonCustomKeyboard.pas(这是主要单位),ufrFullKeyboard.pas和ufrCustomNumpad.pas。就这样。如果Delphi说“错误读取属性...”回答“取消” - 这是因为Delphi无法识别TFrame继承。有关支持的键盘类型,请参阅'directory' => [ 'type' => 'Zend\Mvc\Router\Http\Regex', 'options' => [ 'route' => '/string(?<id>[0-9]+)', 'defaults' => [ 'controller' => 'Application\Controller\MyController', 'action' => 'index' ], ], ] 类功能