Objective c 如何从Popover中的按钮取消UIPopover
我正试图从弹出窗口中的按钮上关闭UIPopOverviewController。此外,我希望它将数据传输回主视图。我让它为一个modalViewController工作,但不是为一个Popover。有人知道我怎样才能做到这一点吗 //爆米花Objective c 如何从Popover中的按钮取消UIPopover,objective-c,xcode,ios,ipad,uipopovercontroller,Objective C,Xcode,Ios,Ipad,Uipopovercontroller,我正试图从弹出窗口中的按钮上关闭UIPopOverviewController。此外,我希望它将数据传输回主视图。我让它为一个modalViewController工作,但不是为一个Popover。有人知道我怎样才能做到这一点吗 //爆米花 - (IBAction) save:(id)sender { if ([self startDateIsValid] && [self endDateIsValid]) { [[self parentVie
- (IBAction) save:(id)sender
{
if ([self startDateIsValid] && [self endDateIsValid])
{
[[self parentViewController] setDatesForEvent:startDate eventEndDate:endDate allDay:[allDaySwitch isOn]];
[self dismissModalViewControllerAnimated:YES];
}
}
//AddEventViewController\u 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> {
#导入
#进口
#导入“dateViewPopOverViewController_iPad.h”
@接口AddEventViewController\u iPad:UIViewController{
//日积月累
#import <UIKit/UIKit.h>
#import "AddEventViewController_iPad.h"
@protocol DismissPopoverDelegate <NSObject>
- (void) dismissWithData:(NSString *)data;
@end
@interface dateViewPopOverViewController_iPad : UIViewController<UIPopoverControllerDelegate> {
#导入
#导入“AddEventViewController_iPad.h”
@协议解除
-(void)dismissWithData:(NSString*)数据;
@结束
@接口dateViewPopOverViewController\u iPad:UIViewController{
想法很简单。YourViewController
-它是UIPopoverController
MainViewController
-创建UIPopoverController
的控制器
在YourViewController
中用discouse方法声明协议
在YourViewController
在MainViewController
在MainViewController
在MainViewController
中创建YourViewController
时,设置委托属性(YourViewController.delegate=self;
)
在操作中,对触摸按钮的响应调用委托方法:[self.delegate dismissWithData:dataToTransfer];
在代码中,它应该是这样的:
在MainViewController.h中:
#import "YourViewController.h"
@class MainViewController: UIViewController < DismissPopoverDelegate >
- (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
}
@protocol DismissPopoverDelegate
- (void) dismissPopover:(NSObject *)yourDataToTransfer;
@end
@class YourViewController : UIViewController
{
id<DismissPopoverDelegate> delegate;
}
@property (nonatomic, assign) id<DismissPopoverDelegate> delegate;
- (void) methodWhenYouWantToDismissPopover
{
[self.delegate dismissPopover:data];
}
在ViewController.h中:
#import "YourViewController.h"
@class MainViewController: UIViewController < DismissPopoverDelegate >
- (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
}
@protocol DismissPopoverDelegate
- (void) dismissPopover:(NSObject *)yourDataToTransfer;
@end
@class YourViewController : UIViewController
{
id<DismissPopoverDelegate> delegate;
}
@property (nonatomic, assign) id<DismissPopoverDelegate> delegate;
- (void) methodWhenYouWantToDismissPopover
{
[self.delegate dismissPopover:data];
}
Sharrps的答案是非常好的,但这里有一个稍微不同的方法,如果您提供一个子类视图控制器,它可能会更快
因此,如果您已经对正在呈现的UIViewController进行了子类化,请在其上定义一个指向UIPopoverController的属性。在呈现视图控制器中,实例化自定义视图控制器,使用所述自定义视图控制器实例化popover,然后将自定义视图控制器的属性指定给指向popover控制器的奥勒包含它
当需要关闭时,您的控制器有一个对其popover的引用,可以关闭它。popover还将有一个指向其父视图控制器的指针,因此您可以通过原始显示视图控制器对模型执行所需的任何操作。在上面的原始对话中“我在@class YourViewController:UIViewController{id delegate;}行上收到一个错误,它说我需要一个;–BDGapps”
答案很简单。这是一种类型。将@class更改为@interface,一切都很好
@protocol DismissPopoverDelegate
- (void) dismissPopover:(NSObject *)yourDataToTransfer;
@end
@interface YourViewController : UIViewController {
id<DismissPopoverDelegate> delegate;
}
@protocoldismisspopoverdelegate
-(作废)解除对:(NSObject*)您的数据的转移;
@结束
@界面YourViewController:UIViewController{
id代表;
}
我在@class YourViewController:UIViewController{id delegate;}行上收到一个错误它说我需要一个;它说我需要一个;相反,在@class AddEventViewController\u iPad:uiviewcontroller中,你认为什么是YourViewController.h和MainViewController.h看看我更新的帖子。YourViewController-它是uipopcovercontroller的viewController。MainViewController-你创建uipopcovercontroller的控制器我已经创建了给你举个例子。明白这很聪明。我要避开公认的答案,走这条路。苹果应该让这条路更简单。当你让一个家伙出去,他说,让我父亲带我走,这可能会很烦人。比公认的答案更简单的路我习惯于这样在类之间传递对象和数据,但是我没有想到要在VC内部实现这样的抛弃popover。