1

我正在尝试使用两个按钮在其中插入带有 uidatepicker 的 uipopover - 取消和完成。在 UIPopover 中的 UIDatePicker的帮助下,我能够使用情节提要设计布局,以及 如何使用 StoryBoard 在 iPad 上的 Popover 中显示 UIDatePicker?

但是,当按下完成按钮时,我无法从 uidatepicker 到 uiviewcontroller 获取日期。我是 ios 编程的新手,我发现委托方法非常混乱。有人可以解释一下吗?非常感谢帮助。谢谢 :)

在此处输入图像描述

4

2 回答 2

3

在视图控制器中获取值的一种绝对正确的方法是实现委托函数。如果您在技术层面上理解,这些都非常容易。我会在这里尝试解释一下。

您必须像这样在 datePickerViewcontrollerClass.h 中定义协议

@protocol TimePopupViewControllerDelegate <NSObject> 
-(void)returnSelectedDate:(NSDate*)date;
@end

并创建一个“id”类型的实例,以像这样传递 mainViewController 的引用。

@property (nonatomic, assign) id < TimePopupViewControllerDelegate > 委托;

在您创建 datePickerViewcontrollerClass 实例的 MainViewController.m 中,您必须像这样设置委托

datePickerViewcontrollerClass *myViewControllerForPopover =[[datePickerViewcontrollerClass alloc] init];
myViewControllerForPopover.delegate = self;

在从 datePickerViewcontrollerClass.m 类中的选择器获取日期的方法中,您必须使用委托将其传递给主类。

-(void)viewDidDisappear:(BOOL)animated{
     [_delegate returnSelectedDate:datepicker.date];
[super viewWillDisappear:animated];

}

您可以使用我在 ViewWillDisappear 中编写的任何方法或任何其他方法来编写它。

在此之后 MainViewController 调用此方法,您可以检索所选日期

-(void)returnSelectedDate:(NSDate *)date{
}

从技术上讲,您将 mainViewController 实例的引用传递给您的 datePickerViewcontrollerClass 并从 datePickerViewcontrollerClass 调用 mainViewController 上的方法我希望如果您仍然有任何疑问可以发表评论,我将能够清楚地解释它。

于 2013-07-13T08:03:49.727 回答
1

在 UIPopover 中,您必须加载一个包含该日期选择器的视图控制器。

所以在那个视图控制器中,为完成和取消按钮编写 IBAction 方法。

完成按钮:

  • 我们可以使用协议来实现这一点 -

DatePickerContainerVC.delegate = myViewController

  • 需要在 Protocol 中声明一个方法并在myViewController-(void)selectedDate: (NSDate *)aDate中实现该方法
  • 从 DateContainerVC 调用委托方法 -[self.delegate selectedDate:datePicker.date];

  • 这将调用您的视图控制器方法,您可以在其中使用日期参数更改标签或按钮文本。

取消按钮:

  • 调用委托方法同上-(void)cancelDatePickerPopover;
  • 在这里关闭您的弹出框控制器
于 2013-07-13T08:09:35.710 回答