2012-05-09 25 views
0

我是Objective-C中的新成员,我制作的应用程序有两个选项卡。一个选项卡是我读出加速度计和陀螺仪的地方,并显示带有标签和进度条的值,第二个选项卡是我可以设置IP,端口等网络设置,还有一个日志文本框。使用委托和协议在两个视图(选项卡)之间传递数据

经过一番搜索,我发现从我的设置选项卡(NetworkViewController)和第一个选项卡(MotionViewController)传递数据的最佳选择是使用委托和协议。

这是我NetworkViewController.h:

@protocol ViewControllerNetworkDelegate <NSObject> 
- (void)PassDataToViewController:(NetworkViewController *)controller didFinishEnteringItem:(NSString *)item; 
@end 

@interface NetworkViewController : UIViewController 

@property (nonatomic, weak) id<ViewControllerNetworkDelegate> delegate; 

@property (strong, nonatomic) IBOutlet UITextField *addressField; 
@property (strong, nonatomic) IBOutlet UITextField *portField; 
@property (strong, nonatomic) IBOutlet UITextView *logField; 

- (IBAction)toggleUDP:(id)sender; 
- (IBAction)hideKeyboard:(id)sender; 

@end 

修正:我的方法PassDataToViewController得到一个错误说 “预期类型”。

我在执行文件我有以下的方法hideKeyboard代码,所以当我更改IP地址的文本框它被exetuded:

NSString *itemToPassBack =addressField.text; 
[self.delegate PassDataToViewController:self didFinishEnteringItem:itemToPassBack]; 

MotionViewController.h:

#import "NetworkViewController.h" 

@interface MotionViewController : UIViewController <ViewControllerNetworkDelegate> 

MotionViewController.m

- (void)viewDidLoad 
{ 
NetworkViewController *networkViewController = [[NetworkViewController alloc] initWithNibName:@"MotionViewController" bundle:nil]; 
networkViewController.delegate = self; 
[self pushViewController:networkViewController animated:YES]; 
} 

- (void)PassDataToViewController:(id)controller didFinishEnteringItem:(NSString *)item{ 
NSString *host= item; 
} 

这是相关的代码我的项目,我t的基于文章Passing Data between View Controllers

我获得以下错误: 'MotionViewController' 不可见@interface声明选择” pushViewController动画
在[自pushViewController:networkViewController动画:是];在MotionViewController.h

提前感谢

+0

你可以使用我的答案和评论来解决你的问题吗? –

回答

0

您需要转发在你的头文件中的协议使用它之前宣布你NetworkViewController,使用

@class NetworkViewController; 

这样编译器知道类您在实际申报之前正在使用。

+0

谢谢,错误已修复,现在我可以构建。但字符串没有通过,我错过了一些东西。你知道吗? – user1385531

+0

您是否在发送字符串的函数中放置了Nslog语句以查看它是否实际被调用? –

+0

不,但我使用了调试器。当我在文本字段中进行更改时,函数会被执行。 – user1385531

相关问题