从另一个类访问IBOutlet



我需要在另一个类中访问此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];

希望这能有所帮助!

最新更新