2016-09-13 59 views
0

在iOS中創建SDK方面非常新穎。任何人都可以幫我解決以下情況。從iOS SDK ViewController獲取響應

  1. 我有一個SDK有3個視圖控制器,在一個單獨的NavigationController中逐個打開。屏幕A,屏幕B和屏幕C.

  2. 來自我正在合併我的SDK的客戶端應用程序。我會有一個按鈕,它會呈現在UInavigationController中的我的SDK控制器。 (我將初始化屏幕A控制器,然後將其作爲根視圖控制器呈現在導航控制器中)

  3. 由於導航控制器中的第一個控制器將是屏幕A,它將有兩個按鈕。一個關閉窗口,另一個轉到下一個屏幕(屏幕B)。

  4. 如果用戶按下關閉按鈕,我需要將響應發送到已關閉按鈕的客戶端應用程序。並且如果用戶按下NEXT Screen按鈕,則屏幕B現在出現在屏幕B上,我們有3個按鈕,要返回,關閉屏幕並轉到下一個屏幕。如果用戶在屏幕B上按下「關閉」按鈕,則我想關閉呈現的控制器並再次關閉SDK控制器窗口已關閉的客戶端應用程序。第三屏幕的情況也是如此。

我有,我可以在每個控制器等使嵌入代表一個選項,但我需要一些更專業和良好的思想來實現這件事情對我的SDK。請引導我的想法和最好的方式來做到這一點。我的語言是OBJECTIVE-C。

感謝

+0

所以最後你想,如果屏幕從應用程序必須發送消息到其他應用程序的任何地方關閉? – vaibhav

+0

是的,我不想寫在每個控制器的代表以及 – Shah

+0

那麼你在屏幕關閉後做什麼?..? – vaibhav

回答

0

想過很多。我提出了以下想法,當我實施它時,它就像一種魅力。如果有人也進入這種情況,就分享吧。

  1. 在您的SDK中創建一個單獨的協議類文件(僅限.h文件)。將它命名爲任何你想命名你的代表。 (也可以在您的SDK中公開該類)
  2. 在該頭文件中聲明必需的或可選的方法。
  3. 在每個控制器中創建id delagete實例。例如在控制器A中,B和C都將具有該實例。
  4. 當用戶試圖將SDK集成到他的應用程序中並嘗試從其客戶端應用程序加載Controller A時,還要求用戶將其委託設置爲self,並在其客戶端應用程序視圖控制器中實施所需的方法。
  5. 在SDK中,當您從控制器A移動到B和從B移動到C時,只需繼續將self.delegate傳遞到下一個控制器。 (這不會創建單獨的實例,而只是將一個代理指向所有其他控制器 - 因此不會出現內存或性能問題)
  6. 現在,當您嘗試調用[self.delegate yourMethodName:@「abc」]時從任何控制器A,B或C等不同的值,那麼它只會指向代理設置爲self的mainController。

這就是你如何實現它,你不需要在不同的控制器中創建不同的委託/協議。你可以傳遞一個額外的參數給委託方法,它可以表示這個委託返回哪個控制器。

謝謝

0

如果代表在每個控制器是不是你不夠好,你可以只用一個過渡代表和檢查傳入和傳出的視圖控制器。

或者如果您使用故事板,則根本不需要委託,只需在您的segue功能中執行與客戶端應用程序相關的調用即可。

+0

謝謝,你能解釋一下你的答案是否適合一個過渡代表。我不使用故事板。謝謝 – Shah