プログレスプレゼンターの使用と作成

プログレスプレゼンターの使用と作成

ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。

多くのアプリは、操作の実行中に進行状況インジケーターを表示します。 たとえば、iOSアプリのスピナーを見て、アプリが何らかの作業を実行していることを確認できます。 詳細については、 進捗インジケータに関するiOSヒューマンインターフェイスガイドラインの記事参照してください。

ProgressPresenter プロトコル準拠するクラスを使用して、これらをスクリーンレットに表示できます。 Liferay Screensには、次の2つのクラスが含まれます。

  • MBProgressHUDPresenter:画面の中央にスピナーでメッセージを表示します。 Liferay Screensはデフォルトでこのプレゼンターを表示します。

  • NetworkActivityIndicatorPresenter:iOSネットワークアクティビティインジケーターを使用して進行状況を表示します。 このプレゼンターはメッセージをサポートしていません。

このチュートリアルでのショーは、あなたがどのようにコードを使用して、使用して、進行状況のプレゼンターを作成するには サンプル追加の高度なバージョンブックマークScreenlet 例として。 最初に、プログレスプレゼンターの使用方法を学習します。

プログレスプレゼンターの使用

BaseScreenletView クラス は、デフォルトのプログレスプレゼンター機能が含まれています。 したがって、デフォルトの MBProgressHUDPresenter以外のプレゼンターを表示するには、Viewクラスが特定の BaseScreenletView 機能をオーバーライドする必要があります。 これを行うには、次の手順を実行します。

  1. Viewクラスで、 BaseScreenletView メソッド createProgressPresenter をオーバーライドして、目的のプレゼンターのインスタンスを返します。 たとえば、サンプルAdd Bookmark Screenletで NetworkActivityIndicatorPresenter を使用するには、 AddBookmarkView_default createProgressPresenter メソッドをオーバーライドして、 NetworkActivityIndicatorPresenter インスタンスを返す必要があります。

     override func createProgressPresenter() -> ProgressPresenter {
         return NetworkActivityIndicatorPresenter()
     }
    
  2. Viewクラスで、 BaseScreenletView プロパティ progressMessages をオーバーライドして、プレゼンターで使用するメッセージを返します。 プレゼンターがメッセージを表示しない場合、空の文字列を返します。 progressMessages プロパティは、ASメッセージを返す必要が :[ProgressMessages文字列] Screenletのアクション名です。 ProgressMessages は、プログレスタイプがキーであり、実際のメッセージが値である辞書を表すタイプエイリアス です。 :三つの可能な進展の種類はScreenletアクションのステータスに対応して ワーキング失敗、または 成功。 したがって、 progressMessages プロパティを使用すると、プレゼンターはスクリーンレットアクションの現在のステータスに適したメッセージを表示できます。

    たとえば、次のコードは、Add Bookmark ScreenletのViewクラス(AddBookmarkView_default)の progressMessages プロパティをオーバーライドします。 Screenletアクション(AddBookmarkAction および GetTitleAction)ごとに、メッセージ(NoProgressMessage)がScreenlet操作の Working ステータスに割り当てられます。 NoProgressMessage は空の文字列のエイリアスであるため、プレゼンターは、スクリーンレットがブックマークを追加またはタイトルを取得しようとしたときにメッセージを表示しないように指示します。 ただし、プレゼンターは進行状況インジケーターを表示することに注意してください。

     override var progressMessages: [String : ProgressMessages] {
         return [
             AddBookmarkScreenlet.AddBookmarkAction : [.Working: NoProgressMessage],
             AddBookmarkScreenlet.GetTitleAction : [.Working: NoProgressMessage],
         ]
     }
    

    メッセージを表示するには、 NoProgressMessage をメッセージに置き換えます。 例えば、次のコードは、のために別々のメッセージを定義 ワーキング成功、及び 失敗

     override var progressMessages: [String : ProgressMessages] {
         return [
             AddBookmarkScreenlet.AddBookmarkAction : [
                 .Working: "Saving bookmark...",
                 .Success: "Bookmark saved!",
                 .Failure: "An error occurred saving the bookmark"
             ],
             AddBookmarkScreenlet.GetTitleAction : [
                 .Working: "Getting site title...",
                 .Failure: "An error occurred retrieving the title"
             ],
         ]
     }
    

すばらしいです\! これで、プログレスプレゼンターの使用方法がわかりました。 次に、独自の作成方法を学びます。

プログレスプレゼンターの作成

独自のプログレスプレゼンターの作成は、あなたが考えるほど複雑ではありません。 Liferay Screensのプレゼンターは、 ProgressPresenter プロトコル準拠するクラスであることを思い出してください。 プレゼンターを作成するには、このプロトコルを最初から適合させるか、このプロトコルに既に適合しているScreensの既存のプレゼンターのいずれかを拡張します(MBProgressHUDPresenter または NetworkActivityIndicatorPresenter)。 ほとんどの場合、 MBProgressHUDPresenter 拡張するだけで十分です。

たとえば、 ブックマークスクリーンレットの追加 AddBookmarkProgressPresenterMBProgressHUDPresenter を拡張して、スクリーンレットのタイトル取得アクションの異なる進行状況インジケーターを表示します。 次の手順を使用して、既存のプレゼンターから拡張するプログレスプレゼンターを作成します。 例として、これらの手順は MBProgressHUDPresenter を拡張して、タイトル取得ボタンの進行状況インジケーターを追加します。

  1. ビューのXIBファイルに、使用するアクティビティインジケーターを追加します。 たとえば、Add Bookmark ScreenletのXIBファイルには、タイトル取得ボタンの上にiOS UIActivityIndicatorView が含まれています。

    図1:更新されたブックマークの追加スクリーンレットのXIBファイルには、タイトル取得ボタンの上に新しいアクティビティインジケーターが含まれています。

  2. Viewクラスで、XIBの新しいアクティビティインジケーターのアウトレットを作成します。 たとえば、Add Bookmark ScreenletのViewクラス(AddBookmarkView_default)には、XIBからの UIActivityIndicatorView @IBOutlet が含まれています。

     @IBOutlet weak var activityIndicatorView: UIActivityIndicatorView?
    

次に、プレゼンタークラスを作成する必要があります。 ここでは、既存のプレゼンタークラスを拡張してこれを行います。 これを行うには、次の手順を使用します。

  1. プレゼンターのベースにする既存のプレゼンタークラスを拡張します。 プレゼンタークラスには、プレゼンターのアクティビティインジケーターとその他のUIコンポーネントのプロパティが含まれている必要があります。 これらのプロパティを設定する初期化子も含まれている必要があります。 たとえば、 AddBookmarkProgressPresenterMBProgressHUDPresenter を拡張し、タイトル取得ボタンと UIActivityIndicatorViewプロパティを含みます。 その初期化子はこれらのプロパティを設定します:

     public class AddBookmarkProgressPresenter: MBProgressHUDPresenter {
    
         let button: UIButton?
    
         let activityIndicator: UIActivityIndicatorView?
    
         public init(button: UIButton?, activityIndicator: UIActivityIndicatorView?) {
             self.button = button
             self.activityIndicator = activityIndicator
             super.init()
         }
         ...
    
  2. 拡張するプレゼンタークラスから適切なメソッドをオーバーライドすることにより、プレゼンターの動作を実装します。 たとえば、 AddBookmarkProgressPresenter MBProgressHUDPresentershowHUDInView および hideHUDFromView メソッドをオーバーライドします。 オーバーライドされた showHUDInView メソッドはボタンを非表示にし、アクティビティインジケーターのアニメーションを開始します。 オーバーライドされた hideHUDFromView メソッドは、このアニメーションを停止し、ボタンを復元します。

     public override func showHUDInView(view: UIView, message: String?, 
         forInteractor interactor: Interactor) {
             guard interactor is GetWebTitleInteractor else {
                 return super.showHUDInView(view, message: message, 
                     forInteractor: interactor)
             }
    
             button?.hidden = true
             activityIndicator?.startAnimating()
     }
    
     public override func hideHUDFromView(view: UIView?, message: String?, 
         forInteractor interactor: Interactor, withError error: NSError?) {
             guard interactor is GetWebTitleInteractor else {
                 return super.hideHUDFromView(view, message: message, 
                     forInteractor: interactor, withError: error)
             }
    
             activityIndicator?.stopAnimating()
             button?.hidden = false
         }
    
     }
    

素晴らしい、それだけです! これで、他のプレゼンターと同じ方法でプレゼンターを使用できます。

関連トピック

iOSスクリーンレットの作成

iOSリストスクリーンレットの作成

iOS用Liferayスクリーンのアーキテクチャ

« スクリーンレットデリゲートを追加するスクリーンレットのモデルクラスの作成と使用 »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています