【问题标题】:uidatepicker in uipopover delegateuipopover 委托中的 uidatepicker
【发布时间】:2013-07-13 07:42:46
【问题描述】:

我正在尝试使用两个按钮插入带有 uidatepicker 的 uipopover - 取消和完成。在UIDatePicker in UIPopoverHow can I show a UIDatePicker inside a Popover on iPad using StoryBoard?

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

【问题讨论】:

    标签: ios uiviewcontroller delegates uidatepicker uipopover


    【解决方案1】:

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

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

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

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

    @property (nonatomic, assign) id 委托;

    在您创建 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 上的方法 如果您还有任何疑问可以发表评论,我希望我能够解释清楚。

    【讨论】:

    • 感谢@Parser,非常详细的解释。我已经按照你说的做了,除了我在 donebutton press 中调用了委托方法..委托似乎没有工作..我如何在单击完成/取消按钮时关闭弹出框?
    • 另外,我需要执行任何转场吗??
    【解决方案2】:

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

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

    完成按钮:

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

    DatePickerContainerVC.delegate = myViewController

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

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

    取消按钮:

    • 调用委托方法同上-(void)cancelDatePickerPopover;
    • 在这里关闭您的弹出框控制器

    【讨论】:

    • 你能详细点吗..在完成按钮的动作方法中,我正在调用委托方法,它似乎不起作用:('- (IBAction)doneButtonPress:(UIBarButtonItem *)sender { NSLog(@"donebuttonpress"); [self.delegate receiveDate:pickedDate]; }'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    相关资源
    最近更新 更多