これまで作ってきたようなQiitaのビューワーアプリケーションのような場合に、メニュー一覧から詳細情報に移る場合には、画面遷移させるのが一般的かと思います。
ただ、状況によって、画面遷移させずにメニュー一覧からサブメニューを展開するようなユーザインタフェースを実現したい場合も出てくるかと思います。
例えば、起動時に最小限のメニューを表示しておき、タグから検索という箇所をタッチするとサブメニューのタグ一覧が展開されるようなイメージです。




先ほどの章で紹介したTableViewSectionで投稿情報別に区切る方法をベースに考えます。
メニュー一覧の表示方法として
という2つがあります。
前者を採用すると、以下のように領域がかなり小さくなってしまい、使い勝手があまり良いとはいえないものになります。


後者のTableViewSectionのHeaderViewにカスタマイズしたものを設定方法を利用することで、メニューの幅の部分も好みのサイズに設定可能になるため、この方法を採用します。
これまで作ってきたアプリケーションをベースにして、それぞれのファイルを実装してきます。
ここはそのまま流用できるのと、説明するべき箇所もないのでコードの記載だけにとどめます。
var mainWindow,win;
mainWindow = require("mainWindow");
win = mainWindow.createWindow();    
win.open();
ここは大きな変更はないのですが
について追記してます。
exports.mainTable = {
    "width": Ti.UI.FULL,
    "height": Ti.UI.FULL,
    "backgroundColor": "#fff",
    "separatorColor": "#ccc",
    "left": 0,
    "top": 0
};
exports.row = {
    "width": Ti.UI.FULL,
    "height":60,
    "borderWidth": 0,
    "className":"entry"
};
exports.iconImage = {
    top:5,
    left:5,
    width:40,
    height:40
};
exports.textLabel = {
    "width":250,
    "height":50,
    "top":5,
    "left":60,
    "color":"#222",
    "font":{
        "fontSize":16,
        "fontWeight":"bold"
    }
};
// 引っ張って更新処理中の色を指定
exports.refreshControl = {
    tintColor:'red'    
};
// QiitaのWebAPIから情報を読み込んでいる状態を示すために ActivityIndicatorを配置しためので
// その設定値
exports.actInd = {
    top:"20%",
    left:"30%",
    height:Ti.UI.SIZE,
    width:Ti.UI.SIZE,
    zIndex:0,
    color: "#f9f9f9",
    backgroundColor:"#444",
    font: {
        fontFamily:'Helvetica Neue',
        fontSize:16,
        fontWeight:'bold'
    },
    message: 'Loading...',
    style:Ti.UI.iPhone.ActivityIndicatorStyle.DARK
};
exports.tagLabel = {
    "width":250,
    "height":50,
    "top":5,
    "left":60,
    "color":"#222",
    "font":{
        "fontSize":16,
        "fontWeight":"bold"
    }
};
exports.iconImage = {
    top:5,
    left:5,
    width:40,
    height:40
};
exports.headerView = {
  width:Ti.UI.FULL,
  height:60
};
exports.headerTitle = {
  top:"50%",
  left:10,
  width:"90%",
  font:{
    fontSize:"20%"
  }
};
従来あったgetItems()という関数内でアクセスする先のURLをhttps://qiita.com/api/v1/itemsからhttps://qiita.com/api/v1/tagsに変更することでタグ一覧情報を取得する処理が実装できます。 そのためgetItems()とgetTags()はアクセス先のURLが異なるだけで、それ以外の処理は共通化できるため、
という形で実装をしてます。
exports.getLocalJSON = function(){
  var sample,file,body;
  sample = Ti.Filesystem.getFile(Ti.Filesystem.resourcesDirectory, "sample.json");
  file = sample.read().toString();
  body = JSON.parse(file);
  return body;
};
exports.getItems = function(callback){
    var qiitaURL = "https://qiita.com/api/v1/items";
    requestToQiitaAPI(qiitaURL,callback);
};
exports.getTags = function(callback){
    var qiitaURL = 'https://qiita.com/api/v1/tags';
    requestToQiitaAPI(qiitaURL,callback);
};
function requestToQiitaAPI(qiitaURL,callback){
    var xhr,method;
    method = "GET";
    xhr = Ti.Network.createHTTPClient();
    xhr.open(method,qiitaURL);
    xhr.onload = function(){
        var body;
        if (this.status === 200) {
            body = JSON.parse(this.responseText);
            callback(body);
        } else {
            Ti.API.info("error:status code is " + this.status);
        }
    };
    xhr.onerror = function(e) {
        var error;
        error = JSON.parse(this.responseText);
        Ti.API.info(error.error);
    };
    xhr.timeout = 5000;
    xhr.send();
}
ここは修正箇所が多いので、まずは実装する関数の対応関係について簡単にまとめます
var style = require("style"),
    mainTable = Ti.UI.createTableView(style.mainTable),
    actInd = Ti.UI.createActivityIndicator(style.actInd),
    qiita = require("qiita");
function initTableViewSection(tableview){
    var section,
      headerView,
      menuLit = ['投稿情報取得する','タグから検索'],
      _i,
      _len,
      headerTitle,
      rows = [];
    for (_i = 0, _len = menuLit.length; _i < _len; _i++) {
      headerView = Ti.UI.createView(style.headerView);
      headerTitle = Ti.UI.createLabel(style.headerTitle);
      headerTitle.text = menuLit[_i];
      headerTitle.addEventListener('click',function(e){    // (1) 
        if(e.source.text === "タグから検索"){                 // (2)
              actInd.show();
              qiita.getTags(function(tags){
                  var section = createTagSection(tags);      // (3)
                  tableview.insertSectionAfter(1,section); // (4)
                  actInd.hide();
              });
        }
      });
      headerView.add(headerTitle);
      section = Ti.UI.createTableViewSection({"headerView":headerView});
      rows.push(section);
    }
  tableview.setData(rows);
}
function createTagSection(tags){                          // (5)
    var section,_i,_len,style = require("style"),row,tagLabel,iconImage;
    section = Ti.UI.createTableViewSection();
    for (_i = 0, _len = tags.length; _i < _len; _i++) {
        row = Ti.UI.createTableViewRow(style.tagRow);
        tagLabel = Ti.UI.createLabel(style.tagLabel);
        iconImage = Ti.UI.createImageView(style.iconImage);
        tagLabel.text = tags[_i].name;
        iconImage.image = tags[_i].icon_url;
        row.add(tagLabel);
        row.add(iconImage);
        section.add(row);
    }
    return section;
} 
exports.createWindow = function(){
    var win = Ti.UI.createWindow({
        title:"QiitaViewer"
    });
    win.add(mainTable);
    win.add(actInd);
    initTableViewSection(mainTable);
    return win;
};