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 地址的文本字段时它会被执行:

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

MotionViewController.h:

#import "NetworkViewController.h"

@interface MotionViewController : UIViewController <ViewControllerNetworkDelegate> 

运动视图控制器.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;
}

这是我的项目的相关代码,它基于这篇文章在视图控制器之间传递数据

我收到以下错误:'MotionViewController' 没有可见的@interface 声明选择器'pushViewController 动画
On [self pushViewController:networkViewController animated:YES]; 在 MotionViewController.h

提前谢谢了

4

1 回答 1

0

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

@class NetworkViewController;

这样,编译器在您实际声明它之前就知道您正在使用的类。

于 2012-05-09T20:25:54.523 回答