uipopover委托中的uidatepicker

时间:2013-07-13 07:42:46

标签: ios uiviewcontroller delegates uidatepicker uipopover

我正在尝试使用两个按钮在其中插入带有uidatepicker的uipopover - 取消和完成。我能够在UIDatePicker in UIPopoverHow can I show a UIDatePicker inside a Popover on iPad using StoryBoard?的帮助下使用故事板设计布局 {{3}}

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

enter image description here

2 个答案:

答案 0 :(得分:3)

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

您必须在datePickerViewcontrollerClass.h中定义协议,如此

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

并创建一个'id'类型的实例,用于传递mainViewController的引用。

  

@property(nonatomic,assign)id&lt; TimePopupViewControllerDelegate&gt;委派;

在你正在创建datePickerViewcontrollerClass实例的MainViewController.m中的

,你必须像这样设置委托

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方法。

完成按钮:

  • 我们可以使用Protocol -
  • 来实现这一目标
  

DatePickerContainerVC.delegate = myViewController

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

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

取消按钮:

  • 调用与上述-(void)cancelDatePickerPopover;
  • 相同的委托方法
  • 此处关闭您的popover控制器