2

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

}

谢谢!

4

3 回答 3

1

没有简单的方法可以从任何应用程序一般访问 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;

这将使您在这两个类之间建立清晰的联系。

于 2013-07-31T02:43:02.420 回答
0

AnIBOutlet的行为与任何其他属性或实例变量一样。因此,如果您想将该引用传递给另一个类,只需执行此操作即可。请注意,您不需要指定与属性同名的实例变量。当前运行时将自行处理。

如果要传递对 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 的引用并且您在 nib/storyboard 中创建了它,请向 SaveTextViewController 添加另一个 IBOutlet。

#import "TextView.h"

@interface SaveTextViewController : UIViewController
@property (retain, nonatomic) IBOutlet UITextField *saveText;
@property (retain, nonatomic) IBOutlet TextView *textView;

@end

最后,我还建议您将 saveText 重命名为 saveTextField,因为它就是这样。此外,您似乎正在使用来自文本字段的未经处理的用户输入数据并将它们输入文件名。这通常是一个坏主意™。我建议您考虑一下您实际上要做什么。这是潜在的危险,并可能导致数据丢失和更多有趣的事情。

于 2013-07-31T03:07:41.943 回答
-1

@implementation TextView

类型

SaveTextViewController *saveTextViewController = [[SaveTextViewController alloc] init];
NSString *documentTXTPath = [documentsDirectory stringByAppendingPathComponent:@"%d",saveTextViewController.saveText];

希望这可以帮助!

于 2013-07-31T02:36:03.313 回答