代表不工作

发布于 2024-11-07 00:46:49 字数 3731 浏览 6 评论 0原文

我正在尝试关闭弹出窗口并同时传输数据。我实现了一个委托 DismissPopoverDelegate 但它无法工作。但没有错误。如果点击保存按钮,它会注册它,并在调用代理之后完成该行。但它不起作用...

AddEventViewController_iPad.h

#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
#import <EventKit/EventKit.h>
#import <EventKitUI/EventKitUI.h>
#import <MessageUI/MessageUI.h>
#import <MessageUI/MFMailComposeViewController.h>
#import <Foundation/Foundation.h>
#import "AboutSme.h"
#import "dateViewPopOverViewController_iPad.h"
#import "addPersonViewControllerPopover_iPad.h"
#import "PreviousEventsTableViewControllerPopover_iPad.h"

@interface AddEventViewController_iPad : UIViewController <UITableViewDelegate, UITableViewDataSource, MFMailComposeViewControllerDelegate, UITextFieldDelegate, UIAlertViewDelegate,UIPopoverControllerDelegate,UINavigationControllerDelegate,UIPopoverControllerDelegate,ABPeoplePickerNavigationControllerDelegate, ABNewPersonViewControllerDelegate, DismissPopoverDelegate> {
UIPopoverController *pop;

AddEventViewController_iPad.m

 - (IBAction) selectStartDate:(id) sender {
  NSLog(@"Select start date");
       dateViewPopOverViewController_iPad *dateViewPopOverViewController =     [[dateViewPopOverViewController_iPad alloc] init];
popover2 = [[UIPopoverController alloc]   initWithContentViewController:dateViewPopOverViewController];

 popover2.delegate = self;
  popover2.popoverContentSize = CGSizeMake(320, 460);

CGRect rect = CGRectMake(790, 170, 175, 300);

[popover2 presentPopoverFromRect:rect inView:self.view      permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];

[dateViewPopOverViewController release];

/*
if (dateViewController == nil) {
    dateViewController = [[DateViewController_iPad alloc] initWithNibName:@"DateViewController_iPad" bundle:nil];
}

[self presentModalViewController:dateViewController animated:YES];

[dateViewController retain];
 */
}

- (void) dismissWithData:(NSString *)data
{
NSLog(@"%@", data);

[pop dismissPopoverAnimated:YES];
[pop release];
}

dateViewPopOverViewController_iPad.h

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@protocol DismissPopoverDelegate <NSObject>
@required
- (void) dismissWithData:(NSString *)data;

@end
@interface dateViewPopOverViewController_iPad : UIViewController {
IBOutlet UIDatePicker *datePicker;
IBOutlet UISegmentedControl *segmentedBar;
IBOutlet UILabel *startLabel;
IBOutlet UILabel *endLabel;
IBOutlet UISwitch *allDaySwitch;
NSDate *startDate;
NSDate *endDate;    
NSDate *now;
NSDateFormatter *dateFormatter;
id<DismissPopoverDelegate> delegate;
}

@property (retain) id delegate;
- (void) dismissWithData:(NSString *)data;



dateViewPopOverViewController_iPad.m

    @implementation dateViewPopOverViewController_iPad

    @synthesize startDate, endDate, datePicker, segmentedBar, startLabel, endLabel, now, allDaySwitch, delegate;

  - (IBAction) save:(id)sender {
    if ([self startDateIsValid] && [self endDateIsValid]) {
        //[[self parentViewController] setDatesForEvent:startDate eventEndDate:endDate allDay:[allDaySwitch isOn]];
  //  [self dismissModalViewControllerAnimated:YES];
        NSLog(@"works");
       [self.delegate dismissWithData:@"Some text from popover"];
  NSLog(@"works1");
    } else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Ooops!" message:@"Please check the dates! Remember the end date must occur after the start date for the event to save." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        [alert release];
    }
}

I'm Trying to dismiss a popover and transfer data at the same time. I implemented a delegate DismissPopoverDelegate but it is failing to work. But there are no errors. If the save button is tapped it registers it and it completes the line after where it calls the delegate. But its not working...

AddEventViewController_iPad.h

#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
#import <EventKit/EventKit.h>
#import <EventKitUI/EventKitUI.h>
#import <MessageUI/MessageUI.h>
#import <MessageUI/MFMailComposeViewController.h>
#import <Foundation/Foundation.h>
#import "AboutSme.h"
#import "dateViewPopOverViewController_iPad.h"
#import "addPersonViewControllerPopover_iPad.h"
#import "PreviousEventsTableViewControllerPopover_iPad.h"

@interface AddEventViewController_iPad : UIViewController <UITableViewDelegate, UITableViewDataSource, MFMailComposeViewControllerDelegate, UITextFieldDelegate, UIAlertViewDelegate,UIPopoverControllerDelegate,UINavigationControllerDelegate,UIPopoverControllerDelegate,ABPeoplePickerNavigationControllerDelegate, ABNewPersonViewControllerDelegate, DismissPopoverDelegate> {
UIPopoverController *pop;

AddEventViewController_iPad.m

 - (IBAction) selectStartDate:(id) sender {
  NSLog(@"Select start date");
       dateViewPopOverViewController_iPad *dateViewPopOverViewController =     [[dateViewPopOverViewController_iPad alloc] init];
popover2 = [[UIPopoverController alloc]   initWithContentViewController:dateViewPopOverViewController];

 popover2.delegate = self;
  popover2.popoverContentSize = CGSizeMake(320, 460);

CGRect rect = CGRectMake(790, 170, 175, 300);

[popover2 presentPopoverFromRect:rect inView:self.view      permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];

[dateViewPopOverViewController release];

/*
if (dateViewController == nil) {
    dateViewController = [[DateViewController_iPad alloc] initWithNibName:@"DateViewController_iPad" bundle:nil];
}

[self presentModalViewController:dateViewController animated:YES];

[dateViewController retain];
 */
}

- (void) dismissWithData:(NSString *)data
{
NSLog(@"%@", data);

[pop dismissPopoverAnimated:YES];
[pop release];
}

dateViewPopOverViewController_iPad.h

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@protocol DismissPopoverDelegate <NSObject>
@required
- (void) dismissWithData:(NSString *)data;

@end
@interface dateViewPopOverViewController_iPad : UIViewController {
IBOutlet UIDatePicker *datePicker;
IBOutlet UISegmentedControl *segmentedBar;
IBOutlet UILabel *startLabel;
IBOutlet UILabel *endLabel;
IBOutlet UISwitch *allDaySwitch;
NSDate *startDate;
NSDate *endDate;    
NSDate *now;
NSDateFormatter *dateFormatter;
id<DismissPopoverDelegate> delegate;
}

@property (retain) id delegate;
- (void) dismissWithData:(NSString *)data;



dateViewPopOverViewController_iPad.m

    @implementation dateViewPopOverViewController_iPad

    @synthesize startDate, endDate, datePicker, segmentedBar, startLabel, endLabel, now, allDaySwitch, delegate;

  - (IBAction) save:(id)sender {
    if ([self startDateIsValid] && [self endDateIsValid]) {
        //[[self parentViewController] setDatesForEvent:startDate eventEndDate:endDate allDay:[allDaySwitch isOn]];
  //  [self dismissModalViewControllerAnimated:YES];
        NSLog(@"works");
       [self.delegate dismissWithData:@"Some text from popover"];
  NSLog(@"works1");
    } else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Ooops!" message:@"Please check the dates! Remember the end date must occur after the start date for the event to save." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        [alert release];
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

旧情别恋 2024-11-14 00:46:49

包含 .h 文件时存在循环引用。

dateViewPopOverViewController_iPad.h 包含 AddEventViewController_iPad.hAddEventViewController_iPad.h 包含 dateViewPopOverViewController_iPad.h,这将导致编译器提出错误。

使用协议的目的之一是避免这种循环引用。从 AddEventViewController_iPad.h 文件中删除 dateViewPopOverViewController_iPad.h 可能会解决该问题

You have a circular reference when including the .h files.

dateViewPopOverViewController_iPad.h includes AddEventViewController_iPad.h and AddEventViewController_iPad.h includes dateViewPopOverViewController_iPad.h, which will cause the compiler to raise an error.

One of the aims to use protocols is to avoid this kind of circular reference. Removing the dateViewPopOverViewController_iPad.h include from your AddEventViewController_iPad.h file might fix the problem

倾其所爱 2024-11-14 00:46:49

您对 dismissPopoverAnimated 的调用不会触发对委托的调用。来自 Apple 的 UIPopoverDelegate 文档:

弹出窗口控制器不会调用此方法来响应对 dismissPopoverAnimated 方法的编程调用。如果您以编程方式关闭弹出窗口,则应在调用 dismissPopoverAnimated 方法后立即执行任何清理操作。

Your call to dismissPopoverAnimated will not trigger the call to the delegate. From Apple's UIPopoverDelegate documentation:

The popover controller does not call this method in response to programmatic calls to the dismissPopoverAnimated method. If you dismiss the popover programmatically, you should perform any cleanup actions immediately after calling the dismissPopoverAnimated method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文