带有uidatepicker委托的uipopover不起作用

Posted

技术标签:

【中文标题】带有uidatepicker委托的uipopover不起作用【英文标题】:uipopover with uidatepicker delegate not working 【发布时间】:2013-07-13 17:39:42 【问题描述】:

我在情节提要中创建了一个带有日期选择器的弹出框,当按下按钮时会弹出。选择日期并按下完成按钮后,必须将日期发送到UIViewController

我已经按照uidatepicker in uipopover delegate 的说明设置了协议和委托方法,但是我的视图控制器中的委托方法从未被调用。我错过了什么吗?我需要为此使用segues吗?请帮忙!!

- (IBAction)doneButtonPress:(UIBarButtonItem *)sender 
    NSLog(@"donebuttonpress");
    [_delegate receiveDate:pickedDate];
    NSLog(@"afterdelegation");

donebuttonpressafterdelegation 都已打印,但从未调用过该方法:(

//selectDatePopover.h

#import <UIKit/UIKit.h>
@protocol selectDatePopoverDelegate <NSObject>
    - (void)receiveDate:(NSString *)theDate;
@end

@interface selectDatePopover : UIViewController
    id <selectDatePopoverDelegate> delegate;


@property (nonatomic, assign) id < selectDatePopoverDelegate > delegate;
- (IBAction)doneButtonPress:(UIBarButtonItem *)sender;
- (IBAction)mydatepicker:(UIDatePicker *)sender;
@end

//selectDatePopover.m

- (IBAction)doneButtonPress:(UIBarButtonItem *)sender 
    NSLog(@"donebuttonpress");
    NSLog(_delegate);
    [_delegate receiveDate:pickedDate];
    NSLog(@"afterdelegation");


- (IBAction)mydatepicker:(UIDatePicker *)sender 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd"];
    pickedDate = [formatter stringFromDate:[sender date]];
    NSLog(pickedDate);

//CheckIn_ViewController.h

#import "selectDatePopover.h"
@interface CheckIn_ViewController : UIViewController <selectDatePopoverDelegate>
    @property UIPopoverController *popover;
@end

//CheckIn_ViewController.m

- (void)receiveDate:(NSString *)theDate 
    NSLog(@"backhere");
    dateLabel.Text = theDate;

//按下此按钮时,弹出窗口必须显示:

- (IBAction)calendarbutton:(UIButton *)sender 
    UIView *anchor = sender;
    selectDatePopover *selectDatePopoverInstance =
    [self.storyboard instantiateViewControllerWithIdentifier:@"selectDatePopover"];
    _popover = [[UIPopoverController alloc] initWithContentViewController:selectDatePopoverInstance];
    [_popover presentPopoverFromRect:anchor.frame
                         inView:anchor.superview
       permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

    selectDatePopoverInstance.delegate = self;

【问题讨论】:

尝试记录 _delegate 和 pickDate 以确保两者都不是 nil。 pickedDate 不为空..我记录了它..但不知道如何记录委托..?? 然后发布您设置委托的代码,以及您创建委托协议和委托属性的 .h 文件。 我刚刚尝试了 NSLog(delegate),它返回了空 @rdelmar 日志应该是 NSLog(@"%@",_delegate)。放在 doneButtonPress 方法中。 【参考方案1】:

这一行:self.popover.delegate = self;是不正确的。委托协议不在 popover 类中,它在其内容视图控制器中,即 selectDatePopover。因此,将该行更改为:

selectDatePopover.delegate = self;

【讨论】:

它返回一个错误:在“UIViewController *”类型的对象上找不到属性“delegate” 您需要在这一行中更改 UIViewController:" UIViewController *selectDatePopover = [self.storyboard ...." 为 selectDatePopover (这是你的类名——最好是这样大写,但由于您没有大写,您可能需要更改实例的名称,以便它们不一样)。 警告消失了..但我仍然无法让代表工作:( 请更新您的问题以显示您现在正在尝试的代码。现在什么不工作?登录时 _delegate 还是 nil 吗? @KedariTheja,这是一个错字吗:initWithContentViewController:selectDatePopover。现在应该是 initWithContentViewController:selectDatePopoverInstance

以上是关于带有uidatepicker委托的uipopover不起作用的主要内容,如果未能解决你的问题,请参考以下文章

点击 UITextField iPad 后 UIPopover 中的 datePicker

启动时如何将数据从 uiviewcontroller 发送到 uipopover?

如何将 UIPopover 附加到以编程方式创建的 CGRect

带有 UIToolbar 错误的 UIDatePicker

带有 UIToolbar 的 UIDatePicker

UIPopover 和传递数据 - 越来越近