我需要在另一个类中访问此IBOutlet的值。。我该怎么做?
这是我的SaveTextViewController.h类
#import <UIKit/UIKit.h>
@interface SaveTextViewController : UIViewController{
IBOutlet UITextField *saveText;
}
@property (retain, nonatomic) IBOutlet UITextField *saveText;
@end
这是我的TextView.m类
#import "TextView.h"
#import "SaveTextViewController.h"
@implementation TextView
- (IBAction)saveTextView{
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [documentPaths objectAtIndex:0];
//Trying to access the returned variable "saveText" from IBOutlet in SaveTextViewController
NSString *documentTXTPath = [documentsDirectory stringByAppendingPathComponent:@"%d",saveText];
NSString *savedString = self.text;
[savedString writeToFile:documentTXTPath atomically:YES];
NSLog(@"%@", documentTXTPath);
}
谢谢!
没有一种干净的方法可以从任何应用程序通用地访问IBOutlet UITextField*saveText。您可以在.h文件而不是.m文件中声明它,并以这种方式访问它,假设您可以发送指向SaveTextViewController类的指针。但是,将指向UITextFIeld的指针从SaveTextController类传递到TextView类是一种更好的做法。
在TextView.h中创建属性
@interface TextView: UIView
@property (nonatomic, strong) UITextField *textField;
@end
在SaveTextViewController.m中创建另一个属性:
@interface SaveTextViewController : UIViewController{
IBOutlet UITextField *saveText;
}
@property (retain, nonatomic) TextView *textView;
@property (retain, nonatomic) IBOutlet UITextField *saveText;
将self.textView分配给您的textView
在viewDidLoad方法中,在TextView类中设置textField,如下所示:
self.textView.textField = self.saveText;
这会让你在这两个类之间有一个清晰的联系。
IBOutlet
的行为与任何其他属性或实例变量一样。因此,如果您想将该引用传递给另一个类,只需执行此操作即可。请注意,不需要指定与属性同名的实例变量。当前运行时将自行处理此问题。
如果要传递对UITextField的引用,请在文本视图中添加一个属性。
@interface TextView : UIView
@property (retain, nonatomic) UITextField *saveTextField;
...
@end
在SaveTextViewController中,您现在可以设置该属性。例如,可以在viewWillAppear:
方法中执行此操作。
@implementation SaveTextViewController
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.textView.saveTextField = self.saveText
}
@end
还要注意,如果您需要对TextView的引用,并且您在笔尖/故事板中创建了该引用,请向SaveTextViewController添加另一个IBOutlet。
#import "TextView.h"
@interface SaveTextViewController : UIViewController
@property (retain, nonatomic) IBOutlet UITextField *saveText;
@property (retain, nonatomic) IBOutlet TextView *textView;
@end
最后,我还建议您将saveText重命名为saveTextField,因为它就是这样。此外,您似乎使用了来自文本字段的未初始化用户输入数据,并将其输入到文件名中。这通常是个坏主意™.我建议你考虑一下你到底想做什么。这可能很危险,会导致数据丢失和更多有趣的事情。
在中
@implementation TextView
型
SaveTextViewController *saveTextViewController = [[SaveTextViewController alloc] init];
NSString *documentTXTPath = [documentsDirectory stringByAppendingPathComponent:@"%d",saveTextViewController.saveText];
希望这能有所帮助!