从 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.
}
我的场景是这样的。 我有一个 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.
}