gpt4 book ai didi

ios - 如何从另一个 View 中关闭 Popover?

转载 作者:行者123 更新时间:2023-11-28 22:51:24 27 4
gpt4 key购买 nike

我有这样的问题:我有一个 Root View ,它有一个 UIPopoverController 和一个按钮,当我单击该按钮时,它会显示一个 tableView。我的应用程序显示正常,但现在当我单击任何行时,UIPopoverController 仍然显示,我希望它关闭。

有什么帮助吗?谢谢!

这是我的代码:

ViewController.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

ViewController.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

TableViewController.h

#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.m

#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

最佳答案

在您当前的工作流程中,ViewControllerTableViewController 没有任何关系。看起来您是从 UIPopoverIphone 而不是 ViewController 呈现 UITableViewController。因此委托(delegate)回调方法 dismissPopover 需要在 UIPopoverIphone 类而不是 ViewController 类中实现。如果您仍想从 ViewController 中关闭 UIPopoverIphone,有两个选项:

  1. 使用 NSNotificationCenter:在 TableViewController 中,您可以在准备关闭弹出窗口时发布通知。然后在 ViewController 中,您可以观察该通知并关闭弹出窗口。在这种情况下,不涉及任何委托(delegate)。

  2. 从您的 UIPopoverIphone 类和 ViewController 类设置委托(delegate)回调。因此,当您点击弹出窗口中的按钮时,它会回调到 ViewController,然后您关闭弹出窗口并准备好您的 TableViewController 并显示它。这里您的 TableViewControllerViewController 有一个连接。

关于ios - 如何从另一个 View 中关闭 Popover?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11904220/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com