2014-11-04 20 views
2

我非常喜歡使用本機組件進行iOS開發的想法,因此我正在測試當前可用的兩個選項:TMS iCLD.P.F iOS Native Components。不幸的是,我發現他們都有限制,使他們很繁瑣或不可能使用,但我仍然希望我只是忽略了一些東西,因此我在這裏問。Firemonkey本地iOS組件的侷限

限制,我發現:

  • TMS ICL:它需要在整個應用程序的所有本機組件是相同的形式!
  • D.P.F .:沒有FMX包裝,允許您將其與FMX表單/組件結合使用。

這裏是我需要的簡化版。我有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

我不認爲TMS ICL有限制。我使用跨越8種不同形式的TMS iCL。但是,您的UIViewController正在使其它窗體實際上處於當前窗體中。 DPF IOS同樣如此。您可以在同一應用程序中混合使用FMX和DPF IOS表單。但是,如果您使用該視圖控制器,則兩種形式實際上是一種。 – FMXExpress 2014-11-08 15:19:16

+0

使用TMS iCL,當我調用UINavigationController.PushViewController(UIViewController2)時,它在Form 2上的ViewController2中滑動,但ViewController2上的組件未顯示。這是我的問題。 – Hans 2014-11-08 20:16:56

回答

1

我聯繫了TMS以解決顯示其他表單組件的問題。組件只需要首先在窗體上初始化。簡單的解決方案是在MainForm.FormShow中快速顯示和隱藏Form2。然而,它可能會導致屏幕閃爍許多「隱藏」的形式使TMS建議做一個小功能(見下文)

作爲獎勵,這是我的兩個componentsets的評價:

TMS ICL:簡單但穩定

  1. 它們在FMX控件中實現了很少的本地屬性作爲已發佈的屬性。這不是一個大問題,因爲您仍然可以直接訪問本地對象並修改其屬性,但它需要更多關於iOS類以及它們如何工作的知識。
  2. 它不包含工作的Windows目標用戶界面。
  3. 它有FMX包裝,它允許你在某種程度上將FMX組件放置在本地組件中。 (通常,當您在窗體上混合使用FMX組件本地組件,原生總是在前面,是因爲他們會佔據整個屏幕,並覆蓋FMX組件無法使用本機導航組件)

DPF本地控件:全面但不太穩定

  1. 它們實現了更多的原生屬性,作爲FMX控件中的已發佈屬性。它使得它工作得更快,特別是如果你不熟悉iOS本機控件及其屬性。
  2. 它確實允許您在Windows上測試您的程序(這比在iOS模擬器上運行速度快得多),因爲控件實際上在Windows中工作。當然,圖形是簡化的,但其目的是測試功能而不是用戶界面。
  3. 沒有辦法混合FMX和本地組件,雖然你可以把與限制FMX組件的形式在本地組件在TMS點3

結論提到:我到底決定購買TMS ICL,原因有二:

  1. 我有很多的,我不想要轉換到iOS自定義控件自定義控件,所以FMX包裝對我來說是不可缺少的。
  2. 我可以得到支持。對於一家公司來說,這比沒有支持的免費解決方案便宜得多,因爲你必須花費數小時才能找出自己的一切。

由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); 
1

在帶有多個選項卡(而不是Form2)的Form1上使用UITabBarController。您可以在本機控件的選項卡之間滑動。

爲了讓FMX Form3在你滑動時可以設置TForm.Transparent:= True ;.然後使用Form3.Show;以顯示錶格。在Form3中包含一個包含您的控件的TPanel/TRectangle。設置TPanel.Position.X:=屏幕寬度;然後在TForm.Show後從右側滑動它;

+0

是的,那將是Delphi/FMX處理這個問題的方法,它不是原生的。不過,我有一個想法,即一位經驗豐富的iOS用戶將能夠以某種方式看到不同之處,所以我非常喜歡本地化。如果我無法用UINavigationController工作制作真正的本機解決方案,我將使用FMX解決方案作爲後備。 – Hans 2014-11-08 20:21:55

+0

正確的我試圖想出一個解決方案,在表單中滑動而不需要鏈接。它看起來像一個UIView可以變得透明(https://stackoverflow.com/questions/15425149/making-uiview-transparent),這樣可以讓你採用相同的想法,但以本地方式。 – FMXExpress 2014-11-09 01:35:50