2013-04-25 102 views
0

在我的项目中,我有3个控制器;在UIDatePicker和UITableView之间进行通信

  • NavigationController
  • ServiceTableViewController
  • DateTableViewController

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

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

回答

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]; 

ServiceTableViewController.h添加

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

因为你在ServiceTableViewController.mUINavigationController,某处添加此当你即将推向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 
} 
0

研究委托模式(here)(苹果框架内的大量使用模式)。你想定义一个委托协议,允许将日期传递给委托。

您可以实现的模式与单一方法的@protocol并在DateTableViewController的属性。在推动DateTableViewController之前,ServiceTableViewController将自己设置为代表。

或者,你可以实现使用块。再次,ServiceTableViewController在推动DateTableViewController之前设置该块。

相关问题