在我的项目中,我有3个控制器;
NavigationController
ServiceTableViewController
DateTableViewController
ServiceTableViewController
是初始视图控制器。它有几行提示用户输入数据,这些数据将通过电子邮件发送到特定的电子邮件地址。其中一行在点按时会将用户发送到DateTableViewController
,提示用户从UIDatePicker
中选择日期。
我面临的问题是从DateTableViewController
获取数据,以便在ServiceTableViewController
上显示标签,以显示用户在DateTableViewController
中选择的日期。我知道如何从一个视图控制器获取信息到另一个视图控制器,但反过来,可以说,我不知道该怎么做。任何帮助表示赞赏。
答案 0 :(得分:0)
研究委托模式(here)(Apple框架中使用频繁的模式)。您希望定义一个委托协议,该协议允许将日期传递给委托。
您可以使用DateTableViewController
上的单个方法和属性将模式实现为@protocol。在推送ServiceTableViewController
之前,DateTableViewController
将自己设置为委托。
或者,您可以使用块实现。同样,ServiceTableViewController
在推送DateTableViewController
之前设置了阻止。
答案 1 :(得分:0)
有几种方法可以在视图控制器之间来回传递数据。
但说实话,代表们确实是你真正需要的,而且听起来就像你目前的情况一样。 看到这个 - > (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>
并且由于您是UINavigationController
,ServiceTableViewController.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
}