我非常喜欢使用本机组件进行iOS开发,因此我正在测试当前可用的两个选项:TMS iCL和D.P.F iOS Native Components。不幸的是,我发现它们都有限制,使它们很麻烦或不可能使用,但我仍然希望我只是忽略了一些东西,因此我在这里问。
我发现限制:
这是我需要的简化版。我有3个表单,一个带有主菜单的主表单(作为按钮)和两个我想要滑入的表单。这是组件结构:
MainForm
UINavigationController
UIButtonA
UIButtonB
UIViewController1
FMXwrapper that wraps Form3 (only in TMS iCL)
Form2
UIViewController2
UIButton2
Form3
Various Firemonkey custom controls
使用TMS iCL实现:FMXwrapper可以使用命令UINavigationController.PushViewController(UIViewController1)在Form3(具有FMX组件)中滑动。我也可以在UIViewController2中滑动,但是这个窗体上的组件(UIButton2)没有显示,这似乎是因为它在另一个窗体上。如果TMS iCL真的要求所有组件都在同一个表单上,那么它是没用的,除非你制作非常小的应用程序,但也许有一个解决方案吗?
使用D.P.F实现。:您实际上可以嵌入来自其他单位的表单,因此我可以在Form2中滑动,但它只会在这些表单上显示DPF组件。因此,在Form3中滑动不会显示任何组件。是否有任何解决方案或解决方法可以使其发挥作用?
如何解决任何一个组件集中的限制的任何建议?
答案 0 :(得分:1)
在Form1上使用带有多个选项卡(而不是Form2)的UITabBarController。您可以在选项卡之间滑动本机控件。
要让FMX Form3滑入,你可以设置TForm.Transparent:= True;。然后使用Form3.Show;显示表格。在Form3中有一个包含控件的TPanel / TRectangle。设置TPanel.Position.X:=屏幕宽度;然后在TForm.Show之后动画从右边滑动它。
答案 1 :(得分:1)
我联系TMS解决了显示其他表单组件的问题。组件只需要首先在表单上初始化。简单的解决方案是在MainForm.FormShow中快速显示和隐藏Form2。然而,有许多"隐藏"形成它可能会导致闪烁,所以TMS建议做一个小功能(见下文)
作为奖励,这是我对两个组件集的评估:
TMS iCL:简单但稳定
D.P.F原生控制:全面但不太稳定
结论:最终我决定购买TMS iCL,原因有两个:
TMS建议的程序:
TMainForm
...
procedure InitializeControl(AControl: TControl);
...
implementation
...
procedure TMainForm.InitializeControl(AControl: TControl);
var I: Integer;
begin
if not Assigned(AControl) then
Exit;
if AControl is TTMSFMXNativeUIBaseControl then
begin
(AControl as TTMSFMXNativeUIBaseControl).Initialize;
for I := 0 to AControl.ControlsCount - 1 do
InitializeControl(AControl.Controls[I]);
end;
end;
...
InitializeControl(Form2.TMSFMXNativeUIViewController2);