我需要在我(也是我的)iOS8应用程序中为某些TEdit创建自定义键盘。其他编辑需要默认的iPad键盘。
在Objective-C中,它看起来很简单-只需创建UIView并将其分配给myTextField.inputView(https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextField_Class/index.html#//apple_ref / occ / instp / UITextField / inputView)。
我该如何在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等来模拟键盘...
在分析FMX的源代码之后,我找到了一个解决方案(仅适用于IOS)。不幸的是,它太大了,无法在此处包含...
简而言之:您必须使用FMX.Types.RegisterShowVKProc(myKeyboardProc)
然后,您将获得使用键盘的选项,但会丢失系统键盘,键盘工具栏以及与它们交互的标准机制。
因此,我创建了数字键盘和字母键盘并使用它们。
我的源代码:iOS的自定义键盘
使用方法:在项目中包括uCommonCustomKeyboard.pas(这是主要单元),ufrFullKeyboard.pas和ufrCustomNumpad.pas。就这样。如果Delphi说“错误读取属性...”,则回答“取消”-这是因为Delphi无法识别TFrame继承。有关支持的键盘类型,请参见SupportedKeyboardTypes
类功能
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句