Ios5 Can';在表视图中选择项后关闭popover

Ios5 Can';在表视图中选择项后关闭popover,ios5,uitableview,uipopovercontroller,xcode4.3,Ios5,Uitableview,Uipopovercontroller,Xcode4.3,我正在使用XCode版本4.3.2创建和安装iPad应用程序。我不知道如何关闭在故事板中创建的popover 在我的主屏幕上有一个按钮。在故事板上,我定义了一个从按钮到我的popover的序列。我的popover是一个表视图控制器。在popover表视图中选择一个项目后,我将所选信息发送回父级并尝试关闭popover。一切都正常,只是我不能把爆米花关上 主屏幕.m文件的代码: #import "SectionViewController.h" #import "SortByTableViewCo

我正在使用XCode版本4.3.2创建和安装iPad应用程序。我不知道如何关闭在故事板中创建的popover

在我的主屏幕上有一个按钮。在故事板上,我定义了一个从按钮到我的popover的序列。我的popover是一个表视图控制器。在popover表视图中选择一个项目后,我将所选信息发送回父级并尝试关闭popover。一切都正常,只是我不能把爆米花关上

主屏幕.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
}
#导入“SectionViewController.h”
#导入“SortByTableViewController.h”
@接口节视图控制器()
@结束
@实现部分视图控制器
-(void)prepareForSegue:(UIStoryboardSegue*)segue发送方:(id)发送方
{
if([segue.identifier IsequalString:@“DisplaySortByOptions”])
{
SortByTableViewController*弹出=(SortByTableViewController*)segue.destinationViewController;
popup.selectedSection=self.selectedSection;
popup.receivedOption=self.selectedItemCharacteristic;
popup.delegate=self;
}
}
-(void)sortByTableViewController:(sortByTableViewController*)发送方
returnedOption:(ItemCharacteristic*)returnedOption
{
如果(!returnedOption)
{
[self.sortByButton setTitle:@“显示所有”状态:UIControlStateNormal];
}
其他的
{
[self.sortByButton setTitle:returnedOption.name for状态:UIControlStateNormal];
}
self.itemCharacteristic=返回选项;
[self dismissViewControllerAnimated:YES completion:nil];//这不会关闭POPOVER
}
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
#导入
@类SortByTableViewController;
@协议SortByTableViewControllerDelegate
-(void)sortByTableViewController:(sortByTableViewController*)发送方
returnedOption:(ItemCharacteristic*)returnedOption;
@结束
@接口SortByTableViewController:UITableViewController
@属性(非原子,强)部分*selectedSection;
@属性(非原子,强)ItemCharacteristic*receivedOption;
@属性(非原子,弱)id委托;
@结束
popover.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
#导入“SortByTableViewController.h”
@接口SortByTableViewController()
@结束
@实现SortByTableViewController
@综合selectedSection=\u selectedSection;
@综合接受度=_接受度;
@综合委托=_委托;
...
-(void)tableView:(UITableView*)tableView未选择RowatineXpath:(NSIndexPath*)indexPath
{
ItemCharacteristic*ItemCharacteristic=[self.fetchedResultsController对象索引路径:indexPath];
[self.delegate sortByTableViewController:self returnedOption:itemCharacteristic];
[self-dismissViewControllerAnimated:YES completion:nil];//这不起作用
[self.navigationController popViewControllerAnimated:是];//这也不起作用
}
@结束

谢谢你的帮助和指导。

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

@property (nonatomic, strong) UIPopoverController *sortByPopoverController;
然后,在启动popover时,我包括以下内容:

UIStoryboardPopoverSegue *popoverSegue = (UIStoryboardPopoverSegue *)segue;
self.sortByPopoverController = popoverSegue.popoverController;
包括该代码使我能够在代理回电时正确地关闭popover:

[self.sortByPopoverController dismissPopoverAnimated:YES];

在斯威夫特,就叫这个

  func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)   
  {
    self.dismissViewControllerAnimated(true, completion: nil)

  }