从另一个类访问IBOutlet?

时间:2013-07-31 02:21:32

标签: ios objective-c 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);

}

谢谢!

3 个答案:

答案 0 :(得分:1)

没有干净的方法可以从任何应用程序一般访问IBOutlet UITextField * saveText。您可以在.h文件而不是.m中声明它,并让它以这种方式访问​​,假设您可以发送指向SaveTextViewController类的指针。但是从SaveTextController类将指向UITextFIeld的指针传递给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;

这会让你在这两个类之间建立一个干净的联系。

答案 1 :(得分:0)

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的引用,并在nib / storyboard中创建了它,请将另一个IBOutlet添加到SaveTextViewController。

#import "TextView.h"

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

@end

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

答案 2 :(得分:-1)

@implementation TextView

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

希望这有帮助!