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

时间:2016-06-02 10:15:16

标签: ios uipopovercontroller

我的情况是这样的。 我有一个tableview单元格,它有一个按钮。如果它有火,它会弹出如下面的

enter image description here

对于上面的菜单弹出窗口,source是每个单元格最右边的按钮。

我有另一个名为diplayAccounts的表视图。 单击弹出菜单的单元格(即视图层次结构)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)
}

我得到的错误

enter image description here 请帮帮我。

1 个答案:

答案 0 :(得分:0)

在另一个popover(来自Apple Mobile人机界面指南)中展示pop并不是一个好主意

你能做的最好的事情就是

在弹出视图控制器类

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

在显示弹出窗口按钮的单元格类中

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

  • 在呈现pop over
  • 之前初始化委托对象
  • 实现委托协议中声明的委托方法以获取选择事件。
  • 显示您想要的另一个弹出窗口。

    <强>更新

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

PopOverWithListItemsViewController.h文件

#import <UIKit/UIKit.h>

@protocol PopoverWithListItemsViewDelegate <NSObject>

- (void)didSelectedListItemAtIndex:(NSInteger)index;

@end

@interface PopOverWithListItemsViewController : UIViewController

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

@end

在表格视图选择事件中,添加委托调用,如

NSInteger indexOfSelectedItem =  4;// jus for demo setting index as 4
[self.delegate didSelectedListItemAtIndex:indexOfSelectedItem];

在您提供列表弹出窗口的类中,添加以下内容

<强>步骤1

您提供弹出窗口的类应该向代理人确认如下

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

<强>第二步

// 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.
}