Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何从Popover中的按钮取消UIPopover_Objective C_Xcode_Ios_Ipad_Uipopovercontroller - Fatal编程技术网

Objective c 如何从Popover中的按钮取消UIPopover

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

我正试图从弹出窗口中的按钮上关闭UIPopOverviewController。此外,我希望它将数据传输回主视图。我让它为一个modalViewController工作,但不是为一个Popover。有人知道我怎样才能做到这一点吗

//爆米花

- (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。