菜鸟教程小白 发表于 2022-12-12 20:07:30

ios - 可扩展 TableView 行 - 为什么像树错误?


                                            <p><p><strong>错误</strong> <strong>在应用中找不到索引行</strong></p>

<p>我正在处理这个代码</p>

<ol>
<li><p>如果我单击第一个时间 TableView 行,则会显示错误</p>

<p>但它会显示子行。</p>

<p>2.如果我单击子行,则会显示此错误:未定义不是对象</p>

<p>(评估(e.row.sub.length)</p>

<p>为什么会出现这个错误?</p>

<p>代码</p>

<pre><code>var win = Ti.UI.createWindow();
var container = Ti.UI.createView({ backgroundColor: &#34;white&#34;, layout: &#34;vertical&#34; });

var layout = [{
      title: &#34;Parent 1&#34;,
      isparent: true,
      opened: false,
      sub: [
            { title: &#34;Child 1&#34; },
            { title: &#34;Child 2&#34; }
      ]
    }, {
      title: &#34;Parent 2&#34;,
      isparent: true,
      opened: false,
      sub: [
            { title: &#34;Child 3&#34; },
            { title: &#34;Child 4&#34; }
      ]
    }];

var tableView = Ti.UI.createTableView({
    style: Titanium.UI.iPhone.TableViewStyle.GROUPED,
    top: 0,
    height: Ti.Platform.displayCaps.platformHeight,
    data: layout
});


tableView.addEventListener(&#34;click&#34;, function (e) {
    var i;
    //Is this a parent cell?
    console.log(e.row);
    if (e.row.isparent) {
      //Is it opened?
      if (e.row.opened) {
            for (i = e.row.sub.length; i &gt; 0; i = i - 1) {
                tableView.deleteRow(e.index + i);
            }
            e.row.opened = false;
      } else {
            //Add teh children.
            var currentIndex = e.index;
            for (i = 0; i &lt; e.row.sub.length; i++) {
                tableView.insertRowAfter(currentIndex, e.row.sub);
                currentIndex++;
            }
            e.row.opened = true;
      }
    }
});

container.add(tableView);

win.add(container);
win.open();
</code></pre>

<p>任何帮助将不胜感激</p></li>
</ol></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您的代码的问题是,当表索引尚未更新时,您试图在表的末尾插入许多行。它的解决方案是使用相同的索引以相反的顺序添加行。</p>

<p>这是您的事件监听器的修改版本:</p>

<pre><code>tableView.addEventListener(&#34;click&#34;, function (e) {
    var i, rows;
    //Is this a parent cell?
    if (e.row.isparent) {
      //Is it opened?
      if (e.row.opened) {
            for (i = e.row.sub.length; i &gt; 0; i = i - 1) {
                tableView.deleteRow(e.index + i);
            }
            e.row.opened = false;
      } else {
            //Add teh children.
            rows = e.row.sub.reverse();
            for (i = 0; i &lt; rows.length; i++) {
                tableView.insertRowAfter(e.index, rows);
            }
            e.row.opened = true;
      }
    }
});
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 可扩展 TableView 行 - 为什么像树错误?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/22375064/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/22375064/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 可扩展 TableView 行 - 为什么像树错误?