LoginSignup
2
3

More than 5 years have passed since last update.

appleTVでpresentModal画面遷移

Last updated at Posted at 2015-09-13

はじめに

前回記事の続きになります。
appleTVでHelloWorld
http://qiita.com/senseiswift/items/1ba47afa73ecc1760cac

今回は画面にボタンを追加して、2つの画面間を遷移できるようにします。

やること

  1. 表示するTVMLにボタンを追加して、変数に切り出し
  2. TVML表示時にイベントリスナー(選択時のコールバックイベント)追加
  3. コールバックイベント内に、次の画面を読み込んで表示する処理を書く

1. 表示するTVMLにボタンを追加して、変数に切り出し

buttonタグでボタンを追加します。

main.js
// 1枚目のTVML
var firstXMLString =
`<?xml version="1.0" encoding="UTF-8" ?>
<document>
<alertTemplate>
<title>Hello AppleTV!</title>
<button>
<text>Hello!</text> // buttonタグでボタンをセットします
</button>
</alertTemplate>
</document>`

// 2枚目のTVML
var secondXMLString =
`<?xml version="1.0" encoding="UTF-8" ?>
<document>
<alertTemplate>
<title>Bye AppleTV!</title>
<button>
<text>Bye!</text>
</button>
</alertTemplate>
</document>`

2. TVML表示時にイベントリスナー(選択時のコールバックイベント)追加

main.js
// 起動時に呼ばれる1枚目のTVMLを表示するメソッドです
function firstAlert() {
    var parser = new DOMParser();
    var alertDOMElement = parser.parseFromString(firstXMLString, "application/xml");

    // イベントリスナーを追加します
    alertDOMElement.addEventListener("select", /* ここにボタン押した時の処理を書きます */, false);
    navigationDocument.presentModal(alertDOMElement);
}

3. コールバックイベント内に、次の画面を読み込んで表示する処理を書く

2枚目のTVMLを表示するメソッドを定義し、
1枚目のTVMLのボタンを押した時のコールバックに指定します。
2枚目のTVMLでボタンが押された時は、1枚目のTVML表示メソッドを呼ぶようにします。

main.js
function firstAlert() {

    // 1枚目のTVMLのボタン押した時に呼ばれる
    // 2枚目のTVMLを表示するメソッドです
    function showSecondXML() {
        var parser = new DOMParser();
        var alertDOMElement = parser.parseFromString(secondXMLString, "application/xml");

        // 2枚目のボタンを押した時、1枚目のTVMLを表示するようにします    
        alertDOMElement.addEventListener("select", function(){firstAlert();}, false);
        navigationDocument.presentModal(alertDOMElement);
    }

    var parser = new DOMParser();
    var alertDOMElement = parser.parseFromString(firstXMLString, "application/xml");

    // コールバックイベントに2枚目のTVMLを表示するメソッドを指定します
    alertDOMElement.addEventListener("select", showSecondXML, false);
    navigationDocument.presentModal(alertDOMElement);
}

動作確認

準備が整ったので、実際に動かしてみましょう! main.jsがあるディレクトリで、
「python -m SimpleHTTPServer 8000」するのを忘れないように注意してください。

アプリ起動後、シミュレータの「HardWare > Show Apple TV Remote」の順に選択して、
リモコンを表示しておきましょう。

1枚目

スクリーンショット 2015-09-13 11.09.07.png

2枚目

スクリーンショット 2015-09-13 11.12.27.png

まとめ

presetModalを使って、複数のTVMLを遷移できるようになりました。
全部modalだと残念なので次はPushPop操作を勉強します。

appleTVでpush/pop画面遷移 AC俺 14日目
http://qiita.com/senseiswift/items/b61139456e9c553ea1bd

ソース全文はgithubを参考にしてください。
https://github.com/senseiswift/appleTVtutorial/commit/2e74e2f0609e95c7d068f5fa5c61e974f65c3f09

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3