[英]How to dismiss UIPopover from a button in the Popover with IOS 8 XCode 6 beta
[英]How to dismiss UIPopover from a button in the Popover
我试图从Popover中的按钮中解除UIPopoverViewControler。 另外我希望它将数据传回主视图。 我有一个modalViewController但不适用于Popover。 有谁知道我怎么能做到这一点?
//酥料饼
- (IBAction) save:(id)sender
{
if ([self startDateIsValid] && [self endDateIsValid])
{
[[self parentViewController] setDatesForEvent:startDate eventEndDate:endDate allDay:[allDaySwitch isOn]];
[self dismissModalViewControllerAnimated:YES];
}
}
// AddEventViewController_iPad
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "dateViewPopOverViewController_iPad.h"
@interface AddEventViewController_iPad : UIViewController <UITableViewDelegate,UITableViewDataSource, MFMailComposeViewControllerDelegate, UITextFieldDelegate, UIAlertViewDelegate,UIPopoverControllerDelegate,UINavigationControllerDelegate,UIPopoverControllerDelegate,ABPeoplePickerNavigationControllerDelegate, ABNewPersonViewControllerDelegate,DismissPopoverDelegate> {
// datePopover
#import <UIKit/UIKit.h>
#import "AddEventViewController_iPad.h"
@protocol DismissPopoverDelegate <NSObject>
- (void) dismissWithData:(NSString *)data;
@end
@interface dateViewPopOverViewController_iPad : UIViewController<UIPopoverControllerDelegate> {
想法很简单。 YourViewController
- 它是UIPopoverController的UIPopoverController
。 MainViewController
- 您创建UIPopoverController
控制器
YourViewController
声明协议 YourViewController
声明类型为id<DismissDelegateProtocol>
属性 MainViewController
声明对DismissDelegateProtocol
支持 MainViewController
实现DismissDelegateProtocol
dismiss方法 MainViewController
创建YourViewController
时设置delegate属性( yourViewController.delegate = self;
) [self.delegate dismissWithData:dataToTransfer];
在代码中它应该是这样的:
在MainViewController.h中 :
#import "YourViewController.h"
@class MainViewController: UIViewController < DismissPopoverDelegate >
在MainViewController.m中 :
- (void) dismissPopover:(NSObject *)yourDataToTransfer
{ /* Dismiss you popover here and process data */ }
...
// Some method, when you create popover
{
YourViewController *vc = ... ;
vc.delegate = self; // this delegate property should be declared as assign
}
在YourViewController.h中 :
@protocol DismissPopoverDelegate
- (void) dismissPopover:(NSObject *)yourDataToTransfer;
@end
@class YourViewController : UIViewController
{
id<DismissPopoverDelegate> delegate;
}
@property (nonatomic, assign) id<DismissPopoverDelegate> delegate;
在YourViewController.m中 :
- (void) methodWhenYouWantToDismissPopover
{
[self.delegate dismissPopover:data];
}
Sharrps的回答非常好,但是如果您要呈现一个子类视图控制器,这里的方法可能会更快一些。
因此,如果您已经为要呈现的UIViewController创建了子类,请在其上定义一个指向UIPopoverController的属性。 在您的呈现视图控制器中,实例化您的自定义视图控制器,使用所述自定义视图控制器实例化您的弹出框,然后将自定义视图控制器的属性指定为指向包含它的弹出控制器。
当需要解雇时,您的控制器会引用它的弹出窗口并可以将其解雇。 弹出窗口还有一个指向它的父视图控制器的指针,因此您可以通过原始呈现视图控制器执行与模型相关的任何操作。
在上面的原始对话框中“即时获取错误@class YourViewController:UIViewController {id delegate;}它说我需要一个; - BDGapps”
答案很简单。 这是一种类型。 将@class改为@interface,一切都很好。
@protocol DismissPopoverDelegate
- (void) dismissPopover:(NSObject *)yourDataToTransfer;
@end
@interface YourViewController : UIViewController {
id<DismissPopoverDelegate> delegate;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.