Ios 我如何从另一个视图中删除Popover?
我有这样一个问题: 我有一个根视图,它有一个UIPopoverController和一个按钮,当我点击该按钮时,它显示一个tableView。我的应用程序显示正常,但现在当我单击任意一行时,UIPopoverController仍会显示,我希望它关闭 有什么帮助吗?谢谢 这是我的代码: ViewController.hIos 我如何从另一个视图中删除Popover?,ios,uipopovercontroller,popover,dismiss,Ios,Uipopovercontroller,Popover,Dismiss,我有这样一个问题: 我有一个根视图,它有一个UIPopoverController和一个按钮,当我点击该按钮时,它显示一个tableView。我的应用程序显示正常,但现在当我单击任意一行时,UIPopoverController仍会显示,我希望它关闭 有什么帮助吗?谢谢 这是我的代码: ViewController.h #import <UIKit/UIKit.h> #import "UIPopoverIphone.h" #import "TableViewController.h"
#import <UIKit/UIKit.h>
#import "UIPopoverIphone.h"
#import "TableViewController.h"
@interface ViewController : UIViewController <UIPopoverControllerDelegate, TableViewPopoverDelegate> {
TableViewController *popoverView;
IBOutlet UIButton *popButton;
UIPopoverController *pop;
}
@property (strong, nonatomic) UIPopoverController *pop;
+(void)hidePop;
@end
#import <UIKit/UIKit.h>
@protocol TableViewPopoverDelegate <NSObject>
-(void) dismissPopover;
@end
@interface TableViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource> {
NSMutableArray *itemsArray;
UITableView *tableView;
id<TableViewPopoverDelegate> delegate;
}
@property (nonatomic, retain) NSArray *itemsArray;
@property (nonatomic, retain) UITableView *tableView;
@property (nonatomic, assign) id<TableViewPopoverDelegate> delegate;
@end
TableViewController.h
#import <UIKit/UIKit.h>
#import "UIPopoverIphone.h"
#import "TableViewController.h"
@interface ViewController : UIViewController <UIPopoverControllerDelegate, TableViewPopoverDelegate> {
TableViewController *popoverView;
IBOutlet UIButton *popButton;
UIPopoverController *pop;
}
@property (strong, nonatomic) UIPopoverController *pop;
+(void)hidePop;
@end
#import <UIKit/UIKit.h>
@protocol TableViewPopoverDelegate <NSObject>
-(void) dismissPopover;
@end
@interface TableViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource> {
NSMutableArray *itemsArray;
UITableView *tableView;
id<TableViewPopoverDelegate> delegate;
}
@property (nonatomic, retain) NSArray *itemsArray;
@property (nonatomic, retain) UITableView *tableView;
@property (nonatomic, assign) id<TableViewPopoverDelegate> delegate;
@end
#导入
@协议表ViewPopOverdelegate
-(无效)解除职务;
@结束
@接口TableViewController:UITableViewController{
NSMutableArray*项目数组;
UITableView*表格视图;
id代表;
}
@属性(非原子,保留)NSArray*itemsArray;
@属性(非原子,保留)UITableView*tableView;
@属性(非原子,赋值)id委托;
@结束
TableViewController.m
#import "ViewController.h"
@implementation ViewController
@synthesize pop;
-(void)dealloc {
[pop release];
[super dealloc];
}
-(IBAction)showPop {
popoverView = [[TableViewController alloc] init];
popoverView.delegate = self;
pop = [[UIPopoverController alloc] initWithContentViewController:popoverView];
[pop setPopoverContentSize:CGSizeMake(100, 200)];
[pop setDelegate:self];
[pop presentPopoverFromRect:popButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}
-(void)hidePop {
[pop dismissPopoverAnimated:YES];
}
....
@end
#import "TableViewController.h"
@implementation TableViewController
@synthesize itemsArray;
@synthesize tableView;
-(void) dealloc {
[itemsArray release];
[tableView release];
[super dealloc];
}
-(void)loadView {
UIView *mainView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 200)];
self.view = mainView;
[mainView release];
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 100, 200) style:UITableViewStylePlain];
self.tableView.delegate = self;
self.tableView.dataSource = self;
[self.view addSubview:self.tableView];
}
....
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here. Create and push another view controller.
/*
<#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
// ...
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
*/
NSLog(@"%@",[self.itemsArray objectAtIndex:indexPath.row]);
[self.delegate dismissPopover];
}
@end
#导入“TableViewController.h”
@TableViewController的实现
@合成沙雷;
@综合桌面视图;
-(无效)解除锁定{
[项目发布];
[tableView发布];
[super dealoc];
}
-(void)负荷视图{
UIView*mainView=[[UIView alloc]initWithFrame:CGRectMake(0,0,100,200)];
self.view=mainView;
[主视图发布];
self.tableView=[[UITableView alloc]initWithFrame:CGRectMake(0,0,100,200)style:UITableViewStylePlain];
self.tableView.delegate=self;
self.tableView.dataSource=self;
[self.view addSubview:self.tableView];
}
....
#pragma标记-表视图委托
-(void)tableView:(UITableView*)tableView未选择RowatineXpath:(NSIndexPath*)indexPath
{
//导航逻辑可能位于此处。创建并推送另一个视图控制器。
/*
*detailViewController=[[alloc]initWithNibName:@“bundle:nil];
// ...
//将选定对象传递给新的视图控制器。
[self.navigationController pushViewController:detailViewController动画:是];
[详细视图控制器发布];
*/
NSLog(@“%@,[self.itemsArray objectAtIndex:indexath.row]);
[self.delegate dismissPopover];
}
@结束
您的根视图ViewController
似乎没有正确实现您的TableViewPopoverDelegate
。您已经在该委托中声明了一个名为dismissPopover
的方法,但尚未在ViewController.m中实现它
在ViewController.m中,将hidePop函数更改为:
-(void)dismissPopover {
[pop dismissPopoverAnimated:YES];
}
默认情况下,当检测到超出其边界的点击时,弹出窗口将自动关闭。对于当前的工作流程,
ViewController
与TableViewController
没有连接。看起来您是从uipooveriphone
而不是从ViewController
显示UITableViewController
。因此,委托回调方法dismissPopover
需要在uipopopoveriphone
类中实现,而不是在ViewController
类中实现。如果仍要从ViewController
关闭iPhone上的UIPopoverIphone
,有两个选项:
NSNotificationCenter
:在TableViewController
中,您可以在准备关闭popover时发布通知。然后在ViewController
中,您可以观察到该通知并关闭popover。在此场景中,不涉及任何委托uipoveriphone
类和ViewController
类设置代理回调。因此,当您点击弹出窗口中的按钮时,它会回调到ViewController
,然后关闭弹出窗口,准备TableViewController
并显示它。这里您的TableViewController
和ViewController
有一个连接好的,我知道,但我想通过选择它所显示的tableView的行来消除它