带有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");
donebuttonpress
和 afterdelegation
都已打印,但从未调用过该方法:(
//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?