我正在尝试使用两个按钮在其中插入带有uidatepicker的uipopover - 取消和完成。我能够在UIDatePicker in UIPopover和How can I show a UIDatePicker inside a Popover on iPad using StoryBoard?的帮助下使用故事板设计布局 {{3}}
但是,当按下完成按钮时,我无法从uidatepicker获取日期到uiviewcontroller。我是ios编程的新手,我发现委托方法非常混乱。有人可以解释一下吗? 非常感谢。谢谢:))
答案 0 :(得分:3)
你绝对正确一种获取视图控制器中的值的方法是实现委托函数。如果您在技术层面上了解,这些非常简单。我会在这里解释一下。
您必须在datePickerViewcontrollerClass.h中定义协议,如此
@protocol TimePopupViewControllerDelegate <NSObject> -(void)returnSelectedDate:(NSDate*)date; @end
并创建一个'id'类型的实例,用于传递mainViewController的引用。
在你正在创建datePickerViewcontrollerClass实例的MainViewController.m中的@property(nonatomic,assign)id&lt; TimePopupViewControllerDelegate&gt;委派;
,你必须像这样设置委托
datePickerViewcontrollerClass *myViewControllerForPopover =[[datePickerViewcontrollerClass alloc] init]; myViewControllerForPopover.delegate = self;
在datePickerViewcontrollerClass.m类中从picker获取日期的方法中,您必须使用委托将其传递给主类。
-(void)viewDidDisappear:(BOOL)animated{ [_delegate returnSelectedDate:datepicker.date]; [super viewWillDisappear:animated];
}
你可以用我在ViewWillDisappear中编写的任何方法或任何其他方法来编写它。
在MainViewController中执行此方法后,将调用此方法,您可以检索所选日期
-(void)returnSelectedDate:(NSDate *)date{ }
从技术上讲,您将mainViewController实例的引用传递给datePickerViewcontrollerClass并从datePickerViewcontrollerClass调用mainViewController上的方法 如果您仍有疑问,我希望能够清楚地解释清楚。
答案 1 :(得分:1)
在UIPopover中,您必须加载一个包含该日期选择器的viewcontroller。
因此在该viewcontroller中,为完成和取消按钮编写IBAction方法。
完成按钮:
DatePickerContainerVC.delegate = myViewController
-(void)selectedDate: (NSDate *)aDate
中声明一个方法,并在 myViewController 从DateContainerVC调用委托方法 - [self.delegate selectedDate:datePicker.date];
这将调用您的视图控制器方法,您可以使用日期参数更改标签或按钮文本。
取消按钮:
-(void)cancelDatePickerPopover;