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'm not sure what'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 ( && 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 () <UITableViewDataSource, UITableViewDelegate,UIPopoverPresentationControllerDelegate>
</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]