iOSスクリーンレットで複数のテーマをサポートする
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。
テーマを使用すると、同じスクリーンレットを異なるルックアンドフィールで表示できます。 たとえば、同じスクリーンレットを使用するアプリが複数ある場合、異なるテーマを使用して、スクリーンレットの外観を各アプリのスタイルに一致させることができます。 Liferay Screensに付属の各スクリーンレットは、複数のテーマの使用をサポートしています。 ただし、カスタムScreenletが異なるテーマをサポートするには、 View Model プロトコルが含まれている必要があります。 ビューモデルは、スクリーンレットの表示に使用されるテーマを抽象化し、開発者が他のテーマを使用できるようにします。 たとえば、 のスクリーンレット作成チュートリアル のScreenletクラスの createInteractor
メソッドは、Viewクラスへの参照を取得するときに、Viewクラス(AddBookmarkView_default
)に直接アクセスします。
let view = self.screenletView as! AddBookmarkView_default
これは、 AddBookmarkView_default
\!で定義されたテーマをハードコードすることを除いて、すべて問題あり`ん。 別のテーマを使用するには、このコード行を書き換えて、そのテーマのViewクラスを使用する必要があります。 これは非常に柔軟ではありません\! Screenletに高価なヨガのクラスを受講させる代わりに、View Modelプロトコルを介してテーマのViewクラスを抽象化できます。
このチュートリアルでは、スクリーンレットにビューモデルを追加する方法を示します。 ブックマークScreenletで作成した追加 Screenlet作成チュートリアル 一例として使用されています。 スクリーンレットの作成中にビューモデルを追加することもできます。
ビューモデルの作成と使用
スクリーンレットでビューモデルを追加して使用するには、次の手順に従います。
スクリーンレットの属性を定義するビューモデルプロトコルを作成します。 これらの属性は、Screenletクラスが使用するViewクラスプロパティです。 たとえば、Add Bookmark Screenlet の Screenletクラスは、Viewクラスプロパティ
title` および `URL`ます。 したがって、ブックマークスクリーンレットのビューモデルプロトコル(`AddBookmarkViewModel`)を追加するには、これらのプロパティの変数を定義する必要があります。
``` import UIKit @objc protocol AddBookmarkViewModel { var URL: String? {get} var title: String? {get} } ```
2
ViewクラスをScreenletのView Modelプロトコルに適合させます。 すべてのプロトコルのプロパティを取得/設定してください。 たとえば、 AddBookmarkViewModel
準拠したAdd Bookmark Screenletのビュークラス(AddBookmarkView_default
)は次のとおりです。
```
import UIKit
import LiferayScreens
class AddBookmarkView_default: BaseScreenletView, AddBookmarkViewModel {
@IBOutlet weak var URLTextField: UITextField?
@IBOutlet weak var titleTextField: UITextField?
var URL: String? {
return URLTextField?.text
}
var title: String? {
return titleTextField?.text
}
}
```
3
Screenletクラスでビューモデル参照を作成して使用します。 Viewクラスの直接参照ではなく、この参照からデータを取得することにより、他のテーマでScreenletを使用できます。 たとえば、 AddBookmarkView_default
への直接参照の代わりに、 viewModel
プロパティを持つ AddBookmarkScreenlet
クラスがあります。 このクラスの createInteractor
メソッドは、このプロパティを使用して、 AddBookmarkInteractor
コンストラクターで タイトル
および URL
プロパティを取得します。
```
...
//View Model reference
var viewModel: AddBookmarkViewModel {
return self.screenletView as! AddBookmarkViewModel
}
override public func createInteractor(name name: String?, sender: AnyObject?) -> Interactor? {
let interactor = AddBookmarkInteractor(screenlet: self,
folderId: folderId,
title: viewModel.title!,
url: viewModel.URL!)
// Called when the Interactor finishes succesfully
interactor.onSuccess = {
let bookmarkName = interactor.resultBookmarkInfo!["name"] as! String
print("Bookmark \"\(bookmarkName)\" saved!")
}
// Called when the Interactor finishes with an error
interactor.onFailure = { _ in
print("An error occurred saving the bookmark")
}
return interactor
}
...
```
それでおしまい\! これで、スクリーンレットは、作成した他のテーマを使用する準備が整いました。 上のチュートリアルを参照してください 作成iOSのテーマ テーマの作成手順について。