2016-08-09 9 views
2

FacebookTwitterのサービスを実装しています。私の見解では、共有を切り替えるボタンがありますFacebook/Twitterかどうか。 Facebook/Twitterが接続されていない場合は、ボタンに「接続先」と表示されます。View Controllerを使用していないPresent View Controller - 短期/目的-C

ボタンをクリックすると、私のコントローラ(私のビューコントローラではない)のメソッドは、このコントローラが自分のアプリケーションの状態を追跡するため、値を切り替えるように試みます。私がソーシャルネットワークに接続していないとき、私のコントローラは通知し、正しいサービスを呼び出すでしょう。このサービスは、ユーザーの資格情報を提供するためにWebビューを開始します。

そして今、私の質問:

私は私のサービスでだと私はWebViewを介して、資格情報を提供する必要があります。私はこのwebviewを見せたいときは、プレゼンテーションを扱うを渡す必要があります。ここでビューコントロールを提供するにはどうすればよいですか?私が見つけた

アプローチ:

  • は(私はこれが汚い見つけるが、私が間違っているなら、私を修正)appdelegateシングルトンを呼び出し、現在の提示 のViewControllerを取得します。私はUIWindow appdelegateの を注入し、 のViewController現在の提示を求めることができ appdelegate.didFinishLaunchingWithOptionsで私のコントローラに私のサービスを注入していますので
  • を作成します(最初のアプローチとほぼ同じです)ビューコントローラによって実装されるプロトコル。サービスは、そのプロトコルと等しいプロパティを持ち、私のアプリケーションデリゲートで ビューコントロールをサービスに挿入します。
  • コントローラーのプロパティがpresentingviewcontrollerになる であり、コントローラーにアプローチ#3プロトコルを実装するようにしてください( )。そのプロトコル の機能が起動すると、コントローラはそれを処理して、webviewのpresentingviewcontrollerプロパティーを使用します( )。私はただ 私のコントローラにviewcontrollerをappdelegateに注入する必要があります。
  • そのサービスに関連するビューは実装しないでください。

私の現在の実装はアプローチ#3です。

いくつかのことがわからない場合は、私にお知らせください。

ご協力いただきましてありがとうございます。 ありがとうございます!

+0

質問に使用したすべてのクラスの名前とタイプを教えてもらえますか? –

+0

クエリの型/クラスが何を意味するのかよく分かりません。もう少し詳しい情報を教えてください。 –

答えて

2

私はこの質問がもっと注目されることを望んでいましたが、私は他の人々がこの状況をどのように処理するか知りたいと考えました。

すでに述べたとおり、必要なものを達成する方法はいくつかありますが、その答えはアプリケーションの知識に依存します。

私は間違いなくビジネスロジックとUIをできるだけ別々にしていますが、これを行うには2つの方法がありますが、ほとんど同じことです。

  1. コールバック関数でログインチェックを担当する(非UI)コントローラを作り、あなたはそのチェックの結果、いずれかのUIのレンダリングを担当するビジネスロジックと呼び出しのViewControllerを担当するコントローラを残すことができます。

  2. あなたが提案したように、プロトコルを使用するコントローラには、使用するプロトコルに準拠するViewControllerになるデリゲートを含めることができます。次に、使用方法は共有インスタンスを取得し、デリゲートを設定し、必要な呼び出しを呼び出すだけです。

プロトコル準拠の言語であるため、私はおそらくオプション2をスウィフトのようにしたいと考えています。

コントローラがグローバルに動作し、アプリケーション内のどこからでもアクセスできる場合は、これらのチェックを行うために多くのコードを複製する可能性があります。これを回避するには、UIViewControllerの拡張機能を作成しますコントローラ。

私はこれが役立つことを願っています。他の人がこれにアプローチする方法を見て間違いなく面白いでしょうか。

+0

ご返信ありがとうございます! 私はオプション2は本当に良いと思うが、あなたのコントローラがあなたのFacebookのサービス/ sdk(あなたのコントローラがすべてのビジネスロジックを処理してから悪いことであるかどうかはわかりません)に依存しています。私が私のアプローチに行ったのは、Facebookのサービスがすべてのロジックを扱うようにしたかったからです。別のfacebooksdkを使用したい場合(おそらく決して起こりません)、サービスクラスを変更するだけでした。それが私のサービスでビューコントローラを持つプロトコルを持っている理由です。 –

+1

ええ、唯一のことはUIを持っていることですが、あなたのソーシャルサービスは現在提示されているVCを入手して使用することができます。あなたはソーシャルプラットフォームとしてFacebookを置き換えることは本当にありません。この場合、自己完結型にしておくことは理にかなっています。私はこの質問に注意を払って、さらに答えが得られるかどうかを見てみましょう。だれかがずっと良いソリューションを持って来るかもしれません。 – Scriptable

+0

本当にありがとうございました! –

関連する問題