ios5 - 在 TableView 中选择项目后无法关闭弹出窗口

标签 ios5 uitableview uipopovercontroller xcode4.3

我正在使用 XCode 版本 4.3.2 创建 iPad 应用程序。我无法弄清楚如何关闭在 Storyboard中创建的弹出窗口。

在我的主屏幕上有一个按钮。在 Storyboard上,我定义了从该按钮到弹出窗口的转场。我的弹出窗口是一个 TableView Controller 。在弹出窗口 TableView 中选择一个项目后,我将所选信息发送回父级并尝试关闭弹出窗口。一切正常,除了我无法关闭弹出窗口。

主屏幕.m文件的代码:

#import "SectionViewController.h"
#import "SortByTableViewController.h"

@interface SectionViewController () <SortByTableViewControllerDelegate>
@end

@implementation SectionViewController

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"DisplaySortByOptions"]) 
    {
        SortByTableViewController *popup = (SortByTableViewController*)segue.destinationViewController;
        popup.selectedSection = self.selectedSection;
        popup.receivedOption = self.selectedItemCharacteristic;
        popup.delegate = self;
    }
}

- (void)sortByTableViewController:(SortByTableViewController *)sender 
                           returnedOption:(ItemCharacteristic *)returnedOption
{
    if(!returnedOption)
    {
        [self.sortByButton setTitle:@"SHOW ALL" forState:UIControlStateNormal]; 
    }
    else 
    {
        [self.sortByButton setTitle:returnedOption.name forState:UIControlStateNormal];
    }
    self.itemCharacteristic = returnedOption;
    [self dismissViewControllerAnimated:YES completion:nil]; //THIS DOES NOT CLOSE THE POPOVER
}

弹出窗口.h 文件的代码:

#import <UIKit/UIKit.h>

@class SortByTableViewController;

@protocol SortByTableViewControllerDelegate <NSObject>

- (void)sortByTableViewController:(sortByTableViewController *)sender 
                           returnedOption:(ItemCharacteristic *)returnedOption;

@end

@interface SortByTableViewController : UITableViewController

@property (nonatomic, strong) Section *selectedSection;
@property (nonatomic, strong) ItemCharacteristic *receivedOption;
@property (nonatomic, weak) id <SortByTableViewControllerDelegate> delegate;

@end

弹出框.m文件的代码:

#import "SortByTableViewController.h"

@interface SortByTableViewController () <UITableViewDelegate>

@end

@implementation SortByTableViewController

@synthesize selectedSection = _selectedSection;
@synthesize receivedOption = _receivedOption;
@synthesize delegate = _delegate;

...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    ItemCharacteristic *itemCharacteristic = [self.fetchedResultsController objectAtIndexPath:indexPath];
    [self.delegate sortByTableViewController:self returnedOption:itemCharacteristic];
    [self dismissViewControllerAnimated:YES completion:nil]; //THIS DOESN'T WORK
    [self.navigationController popViewControllerAnimated:YES]; //THIS DOESN'T WORK EITHER
}

@end

感谢您的帮助或指导。

最佳答案

我找到了答案。我必须将以下属性添加到我的主屏幕:

@property (nonatomic, strong) UIPopoverController *sortByPopoverController;

然后,在启动弹出窗口时,我添加了以下内容:

UIStoryboardPopoverSegue *popoverSegue = (UIStoryboardPopoverSegue *)segue;
self.sortByPopoverController = popoverSegue.popoverController;

包含该代码使我能够在委托(delegate)回调时正确关闭弹出窗口:

[self.sortByPopoverController dismissPopoverAnimated:YES];

关于ios5 - 在 TableView 中选择项目后无法关闭弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10607201/

相关文章:

ios - iOS 多任务处理中的启动画面

ios - 如何让我的 ios 应用程序出现在设置中的定位服务中

ios - 如何在 swift 中以编程方式打开一个新的 tableview

ios - 在 Tableview 的编辑模式下禁用 TextField

iphone - 将 UIView 从 UIPopOverController 中的 UIScrollView 拖放到主 UIViewController?

iphone - 如何关闭 UIPopoverController?

iphone - iOS 5 中的协议(protocol)和分配属性

ios - 数据源更改后动态重新加载 UIPageViewController

iphone - UITableView 多选

ios - 关闭 AutoLayout 的 iPhone Popover