在UIDatePicker和UITableView之间进行通信
在我的项目中,我有3个控制器;在UIDatePicker和UITableView之间进行通信
NavigationController
ServiceTableViewController
DateTableViewController
的ServiceTableViewController
是初始视图控制器。它有几行提示用户输入数据,这些数据将通过电子邮件发送到特定的电子邮件地址。其中一行在点击时将用户发送到DateTableViewController
,该提示用户从UIDatePicker
中选择一个日期。
我面临的问题是从DateTableViewController
获取数据,以便在ServiceTableViewController
上显示标签以显示用户在DateTableViewController
中选择的日期。我知道如何从一个视图控制器获取信息到另一个视图控制器,但是反过来说,我不知道该怎么做。任何帮助表示赞赏。
有几种方法可以查看控制器之间传递数据来回。
但老实说代表是真的你真的需要这听起来像在当前的情况下。 看到这一点 - >(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];
并ServiceTableViewController.h
添加
#import "DateTableViewController.h"
@interface ServiceTableViewController : UIViewController <DateTableViewControllerDelegate>
因为你在ServiceTableViewController.m
是UINavigationController
,某处添加此当你即将推向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
}
研究委托模式(here)(苹果框架内的大量使用模式)。你想定义一个委托协议,允许将日期传递给委托。
您可以实现的模式与单一方法的@protocol并在DateTableViewController
的属性。在推动DateTableViewController
之前,ServiceTableViewController
将自己设置为代表。
或者,你可以实现使用块。再次,ServiceTableViewController
在推动DateTableViewController
之前设置该块。