Titanium Appcelerator SubView 在 IOS 中不起作用

Posted

技术标签:

【中文标题】Titanium Appcelerator SubView 在 IOS 中不起作用【英文标题】:Titanium Appcelerator SubView not Working in IOS 【发布时间】:2013-10-30 22:45:06 【问题描述】:

现在我有一个带有滑动菜单的应用程序。主窗口有一个视图,即“主体视图”。当用户从滑动菜单中选择一个项目时,它会更改将哪个视图添加到主体视图。这是索引的 .xml:

    <Alloy>
    <Window class="container">
        <View id="menuview">
            <View id="menuheaderview">
                <Label id="menuheaderlabel">Menu</Label>
            </View>
            <View id="menubodyview">
                <TableView id="menutableview" onClick="select">
                    <TableViewRow class="menurowview">
                        <Label class="menulabel">News</Label>
                    </TableViewRow>
                    <TableViewRow class="menurowview">
                        <Label class="menulabel">Calendar</Label>
                    </TableViewRow>
                    <TableViewRow class="menurowview">
                        <Label class="menulabel">Homework</Label>
                    </TableViewRow>
                    <TableViewRow class="menurowview">
                        <Label class="menulabel">Classes</Label>
                    </TableViewRow>
                    <TableViewRow class="menurowview">
                        <Label class="menulabel">Information</Label>
                    </TableViewRow>
                    <TableViewRow class="menurowview">
                        <Label class="menulabel">Help</Label>
                    </TableViewRow>
                </TableView>
            </View> 
        </View>

        <View id="mainview">
            <View id="mainheaderview">
                <Button id="menubutton" onClick="showhidemenu"/>
                <Label id="mainheaderlabel">News</Label>
                <Button id="addbutton" />
            </View>
            <View id="mainbodyview" ></View>
        </View>

    </Window>
</Alloy>

和控制器:

var menuOpen = false;
function showhidemenu(e) 
    if (menuOpen) 
        moveTo = "0";
        menuOpen = false;
     else 
        moveTo = "35%";
        menuOpen = true;
    

    $.mainview.width = Ti.Platform.displayCaps.platformWidth;
    $.mainview.animate(
        left : moveTo,
        curve : Ti.UI.ANIMATION_CURVE_EASE_OUT,
        duration : 300
    );
;

function select(e) 

    for (var i = 0; i < e.section.rows.length; i++) 
        e.section.rows[i].backgroundColor = '#212429';
    

    var selectedRow = e.row;
    selectedRow.backgroundColor = 'yellow';
    if ($.mainbodyview.children.length) 
        $.mainbodyview.removeAllChildren();
    
    //*************add your view here*******************
    if (selectedRow.children[0].text == 'News') 
        $.mainheaderlabel.setText('News');
        $.addbutton.visible = false;
        $.mainbodyview.add(Alloy.createController('news').getView());
     else if (selectedRow.children[0].text == 'Homework') 
        $.mainheaderlabel.setText('Homework');
        $.addbutton.visible = true;
        $.mainbodyview.add(Alloy.createController('homework').getView());
     else if (selectedRow.children[0].text == 'Information') 
        $.mainheaderlabel.setText('Information');
        $.addbutton.visible = false;
        $.mainbodyview.add(new Alloy.createController('information').getView());
     else if (selectedRow.children[0].text == 'Calendar') 
        $.mainheaderlabel.setText('Calendar');
        $.addbutton.visible = false;
        //$.mainbodyview.add(Alloy.createController('calendar').getView());
     else if (selectedRow.children[0].text == 'Classes') 
        $.mainheaderlabel.setText('Classes');
        $.addbutton.visible = false;
        //$.mainbodyview.add(Alloy.createController('classes').getView());
     else if (selectedRow.children[0].text == 'Help') 
        $.mainheaderlabel.setText('Help');
        $.addbutton.visible = false;
        $.mainbodyview.add(Alloy.createController('help').getView());
     else 

    
    //**************************************************
    showhidemenu();
;


$.index.open();
$.mainbodyview.add(Alloy.createController('news').getView());

ios上被破解的部分代码是$.mainbodyview.add(Alloy.createController('news').getView()); 和任何类似的东西。它在 android 上完美运行。为了兼容IOS,我有什么遗漏吗?

【问题讨论】:

什么是错误信息? 没有错误信息,没有加载到 mainbodyview 中。 你能从模拟器中添加你的 .tss 文件和截图吗?看起来一切正常,但您正在加载的视图显示在屏幕外,这就是它看起来像坏了的原因。通过将背景颜色更改为明亮的颜色,确保所有元素都可见。 【参考方案1】:

我也遇到了同样的问题。 我使用的是窗口标签,之前它在 Android 上运行良好,但不适用于 iPhone,但后来我在视图中将我的“窗口”标签更改为“视图”标签。它开始适用于 Android 和 iPhone。

【讨论】:

以上是关于Titanium Appcelerator SubView 在 IOS 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 Titanium appcelerator 进行游戏开发

iOS、Appcelerator Titanium 和外部附件框架

iOS LocationManager 未更新位置(Titanium Appcelerator 模块)

Appcelerator Titanium 中面向 OOP 的 CommonJS

如何在Android中使用Appcelerator Titanium构建Oauth 2.0

Appcelerator Titanium 中的自定义通知视图