菜鸟教程小白 发表于 2022-12-13 16:52:22

ios - UITableviewcell 的弹出窗口不起作用


                                            <p><p>我有 6 个单元格的动态 <code>tableview</code>。 </p>

<h2>问题陈述:</h2>

<p>现在,我想显示一个弹出框,它应该正好出现在所选单元格的右侧,并且箭头向左指向单元格。</p>

<h2>我做了什么:</h2>

<p>1) 创建了 <code>PopUpViewController.m/.h</code> 。<br/>
2) 创建了一个从单元格到此 popUpViewController 的“Present as popover”segue。<br/>
3) 目前 Storyboard 中的 anchor 设置为 <code>tableview</code>,因此弹出框从左上角显示。 </p>

<p>看完之后,</p>

<p>1) 我为单元格创建了一个 <code>XTableViewCell.m/.h</code> 类。<br/>
2) 在单元格的右端创建一个小按钮,并将其放在 <code>XTableViewCell.h</code> 文件中,以使用此按钮作为 anchor 。 </p>

<p>我的问题是,我已经在 Storyboard 中完成了所有这些。 </p>

<p>将我的 <code>tableViewController</code> 类视为 <code>YTableViewController.h/.m</code> </p>

<p>1) 我应该在哪里以及如何使用 anchor 按钮将我的弹出框锚定到我的要求? </p>

<p>2) 默认情况下, Storyboard中的 anchor 设置为单元格名称。它会被我的按钮覆盖吗? </p>

<p>3) 我应该在哪里配置 <code>UIPopoverPresentationController</code> 参数? </p>

<p>4) 如何在 iPhone 中将弹出窗口显示为“弹出窗口”而不是全屏 ViewController ?</p>

<p>请帮忙。 </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>首先,您应该从您的 ViewController 中创建一个弹出框segue,其中包含您的表格 View 。您可以通过控制从文档大纲中的黄色 ViewController 图标拖动到要弹出的 ViewController 来执行此操作。通过单击 segue 并打开属性检查器并将其添加到 segue 标识符字段,为其提供一个 segue 标识符。像“Popover”这样的东西现在可以工作了。</p>

<p>接下来,您应该从 segue 标识符字段下方的 anchorView 圈拖动到您的 ViewController 的 View (我们稍后会在代码中对此进行调整)。</p>

<p>您应该向 <code>UITableViewCell</code> 子类添加一个按钮。然后在您的 <code>cellForRowAtIndexPath:</code> 中,您可以为按钮添加一个目标,例如:</p>

<pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *cellIdentifier = ; // I&#39;m not sure what&#39;s going on here but hopefully you do
    RegisterTableViewCell *cell = ;

    ;

    // Configure the cell...
    return cell;

}
</code></pre>

<p>将 <code>presentPopover:</code> 方法添加到您的 ViewController :</p>

<pre><code>- (void) presentPopover:(UIButton *)sender
{
    ;
}
</code></pre>

<p>现在,您可以在 ViewController 的 <code>prepareForSegue:</code></p> 中更改源 View

<p>您可以获得对 <code>UIPopoverPresentationController</code> 的引用,并检查源 View 是否是您的 <code>UITableViewCell</code> 子类的实例。如果是这样,请将源 View 调整为其按钮。</p>

<pre><code>- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ( &amp;&amp; segue.destinationViewController.popoverPresentationController) {
      UIPopoverPresentationController *popController = segue.destinationViewController.popoverPresentationController;
      popController.sourceView = sender;
      popController.delegate = self;
      // if you need to pass data you can access the index path for the cell the button was pressed by saying the following
      CGPoint location = ;
      NSIndexPath *indexPath = ;
      // do something with the indexPath
    }
}
</code></pre>

<p>如果您希望 ViewController 即使在实现 <code>UIPopoverPresentationControllerDelegate</code> 方法时也始终显示为弹出框:</p>

<pre><code>- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller{
    return UIModalPresentationStyleNone;
}
</code></pre>

<p>此时,您可能会收到警告。这可以通过告诉编译器你符合 <code>UIPopoverPresentationControllerDelegate</code> 协议(protocol)来消除。例如:</p>

<pre><code>@interface MyTableViewController () &lt;UITableViewDataSource, UITableViewDelegate,UIPopoverPresentationControllerDelegate&gt;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UITableviewcell 的弹出窗口不起作用,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/37617452/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/37617452/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UITableviewcell 的弹出窗口不起作用