从 ios 应用程序的弹出窗口获取弹出窗口

Getting a popOver from a popover for an ios application

我的场景是这样的。 我有一个 table 视图单元格,其中有一个 button.If 触发它的菜单将弹出如下

对于上面的弹出菜单,来源是出现在每个单元格最右侧的按钮。

我还有一个名为 diplayAccounts 的 table 视图。 单击弹出菜单的单元格(即视图层次结构)时,displayAccounts 视图控制器需要显示为弹出窗口。我的疑问是它的来源应该是什么。

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
menuTapped(self)
} 

方法menuTapped如下

func menuButtonTapped(sender: AnyObject)
{
    let storyboard : UIStoryboard = UIStoryboard(name: "Storyboard", bundle: nil)
    let vc = storyboard.instantiateViewControllerWithIdentifier("HierarchyTableViewController") as! HierarchyTableViewController
    vc.modalPresentationStyle = UIModalPresentationStyle.Popover
    let popover: UIPopoverPresentationController = vc.popoverPresentationController!
    popover.sourceView = sender as? UIView
    popover.delegate = self
    presentViewController(vc, animated: true, completion:nil)
}

我遇到的错误

请帮助我。

在另一个 popover 中呈现 pop over 不是个好主意(来自 Apple Mobile Human Interface Guidelines)

你能做的最好的事情就是

在弹出视图控制器中class

  • 在视图控制器中实施委托协议 class 以显示附件中显示的项目列表。
  • 在该委托协议中,添加带有参数的回调方法以包含所选单元格的详细信息。
  • 在弹出框 class 的视图控制器中添加委托 属性。
  • 从单元格选择事件调用委托方法。

在单元格 class 中显示显示弹出框的按钮

(即上图中显示44087和111的单元格)

  • 在呈现弹出之前初始化委托对象
  • 实现委托协议中声明的委托方法,获取选择事件。
  • 显示您想要的其他流行音乐。

    更新

这将是显示项目列表的弹出视图控制器,如上所示

PopOverWithListItemsViewController.h 文件

#import <UIKit/UIKit.h>

@protocol PopoverWithListItemsViewDelegate <NSObject>

- (void)didSelectedListItemAtIndex:(NSInteger)index;

@end

@interface PopOverWithListItemsViewController : UIViewController

@property (nonatomic, weak) id<PopoverWithListItemsViewDelegate> delegate;

@end

在table视图选择事件中,添加像

这样的委托调用
NSInteger indexOfSelectedItem =  4;// jus for demo setting index as 4
[self.delegate didSelectedListItemAtIndex:indexOfSelectedItem];

并在 class 中显示列表弹出窗口,添加以下内容

步骤1

您从中呈现弹出窗口的 class 应该像下面这样向委托人确认

@interface ViewController () <PopoverWithListItemsViewDelegate> // let ViewController is the class from which you presenting the pop over

步骤2

// Let this be the cell's button tap event from which you presenting the pop over
- (IBAction)buttonTapEvent:(id)sender
{
  // Presenting pop over sections
  PopOverWithListItemsViewController *listItemsPopOverVC = [[PopOverWithListItemsViewController alloc] init];
  listItemsPopOverVC.delegate = self;
  // pop over presenting with listItemsPopOverVC as popover's view controller
}

步骤3

// Delegate method implementation.
- (void)didSelectedListItemAtIndex:(NSInteger)index
{
  // Here we get the index of the selected cell in the popover.
  // Present the new popover from here, after customizing the new pop over contents.
}