在UIDatePicker和UITableView之间进行通信

时间:2013-04-25 18:15:35

标签: ios xcode uitableview uidatepicker

在我的项目中,我有3个控制器;

  • NavigationController
  • ServiceTableViewController
  • DateTableViewController

ServiceTableViewController是初始视图控制器。它有几行提示用户输入数据,这些数据将通过电子邮件发送到特定的电子邮件地址。其中一行在点按时会将用户发送到DateTableViewController,提示用户从UIDatePicker中选择日期。

我面临的问题是从DateTableViewController获取数据,以便在ServiceTableViewController上显示标签,以显示用户在DateTableViewController中选择的日期。我知道如何从一个视图控制器获取信息到另一个视图控制器,但反过来,可以说,我不知道该怎么做。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

研究委托模式(here)(Apple框架中使用频繁的模式)。您希望定义一个委托协议,该协议允许将日期传递给委托。

您可以使用DateTableViewController上的单个方法和属性将模式实现为@protocol。在推送ServiceTableViewController之前,DateTableViewController将自己设置为委托。

或者,您可以使用块实现。同样,ServiceTableViewController在推送​​DateTableViewController之前设置了阻止。

答案 1 :(得分:0)

看看这个: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html

有几种方法可以在视图控制器之间来回传递数据。

但说实话,代表们确实是你真正需要的,而且听起来就像你目前的情况一样。 看到这个 - > (Passing Data between View Controllers


话虽如此,如果你使用代表,这里是如何--- 在DateTableViewController.h顶部设置一个协议,如下所示:

@protocol DateTableViewControllerDelegate <NSObject>
- (void)userSelectedThisDate:(NSDate *)d;
end

将其与其他属性

放在一起
@property (nonatomic, weak) id <DateTableViewControllerDelegate> delegate;

并在DateTableViewController.m中发送回日期

[self.delegate userSelectedThisDate:withTheDateToSendBack];

in和ServiceTableViewController.h添加

#import "DateTableViewController.h"
@interface ServiceTableViewController : UIViewController <DateTableViewControllerDelegate>

并且由于您是UINavigationControllerServiceTableViewController.m中的某个位置,当您要推送到DateTableViewController

时添加此内容
DateTableViewController *vc = [[DateTableViewController alloc] init];
self.delegate = self;
[self.navigationController pushViewController:vc animated:YES];

最后将委托方法放在ServiceTableViewController.m

- (void)userSelectedThisDate:(NSDate *)d {
   NSLog(@"%@", d); // this should show the returned date 
}