您的位置:首页 > 移动开发 > IOS开发

解决Titanium Tab组件click事件在iOS中不生效的方案

2013-03-31 02:54 344 查看
问题: 以下代码,tab1的click事件在Android中生效,在iOS不生效
1: function ApplicationTabGroup(Window) {

2:      //create module instance


3: var self = Ti.UI.createTabGroup();

4:   


5: //create app tabs

6:      var win1 = new Window(L('home')), win2 = new Window(L('settings'));


7:  

8:      var tab1 = Ti.UI.createTab({


9: title : L('home'),

10:          icon : '/images/KS_nav_ui.png',


11: window : win1

12:      });


13: win1.containingTab = tab1;

14:   


15: var tab2 = Ti.UI.createTab({

16:          title : L('settings'),


17: icon : '/images/KS_nav_views.png',

18:          window : win2


19: });

20:      win2.containingTab = tab2;


21:  

22:      self.addTab(tab1);


23: self.addTab(tab2);

24:   


25: tab1.addEventListener('click',function(){

26:          //这个事件在iOS中不会被触发


27: });

28:   


29: return self;

30:  };


31:  

32:  module.exports = ApplicationTabGroup;


.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

解决方案:

通过看Titanium附带的示例程序 Kitcken Sink , 找到了解决方案.

为TabGroup添加focus事件,然后对事件参数进行判断,来确定当前被点击的是那个tab.

 

1: function ApplicationTabGroup(Window) {

2:      //create module instance


3: var self = Ti.UI.createTabGroup();

4:   


5: //create app tabs

6:      var win1 = new Window(L('home')), win2 = new Window(L('settings'));


7:  

8:      var tab1 = Ti.UI.createTab({


9: title : L('home'),

10:          icon : '/images/KS_nav_ui.png',


11: window : win1

12:      });


13: win1.containingTab = tab1;

14:   


15: var tab2 = Ti.UI.createTab({

16:          title : L('settings'),


17: icon : '/images/KS_nav_views.png',

18:          window : win2


19: });

20:      win2.containingTab = tab2;


21:  

22:      self.addTab(tab1);


23: self.addTab(tab2);

24:   


25: self.addEventListener('focus', function(e) {

26:   


27: var info = Titanium.API.info;

28:   


29: // 在iOS中, e.source 是 TabGroup对象,

30:          // 在Android中,e.source 是 Tab对象


31: var src = e.source;

32:          var tab = e.tab;


33: var preTab = e.previousIndex;

34:   


35: // e.tab 是当前获得焦点的tab

36:          // e.index 当前获得焦点的tab的索引,首次为-1


37: // e.previousTab 上个tab

38:          // e.previousIndex 上个tab的索引,首次为null


39:  

40:          // On iOS, the "More..." tab is actually a tab container, not a tab. When it is clicked, e.tab is undefined.


41: if (!tab) {

42:              info('在iOS中点击了"More..."');


43: return;

44:          }


45:  

46:          // 首次


47: if (!preTab) {

48:              info('首次进入');


49: return;

50:          }


51:  

52:          if (tab === tab1) {


53: info('点击了tab1');

54:          } else if (tab === tab2) {


55: info('点击了tab2');

56:          }


57: });

58:   


59: return self;

60:  };


61:  

62:  module.exports = ApplicationTabGroup;


.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: