2013-07-31 3 views
2

Мне нужно получить доступ к этому значению IBOutlet в другом классе. Как мне это сделать?Доступ к IBOutlet из другого класса?

Heres мой 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); 

} 

Спасибо!

ответ

-1

В

@implementation TextView 

типа

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

Надеется, что это помогает!

+0

Спасибо. Попробуй это прямо сейчас! –

+0

Теперь он бросает ошибку «слишком много аргументов для вызова метода». Как бы я это исправить? http://i.imgur.com/1FbZG6j.png –

+0

Ну ... строковые литералы не являются волшебными форматированными строками, они содержат строки формата. – CodaFi

1

Существует нет чистого способа просто получить доступ к IBOutlet UITextField * saveText из любого приложения. Вы можете объявить его в .h файле вместо .m и сделать его доступным таким образом, предполагая, что вы можете отправить указатель на свой класс SaveTextViewController. Но лучше перевести указатель на ваш UITextFIeld в класс TextView из класса SaveTextController.

в 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, установите textField в свой класс TextView следующим образом:

self.textView.textField = self.saveText; 

Это даст вам чистую связь между этими двумя классами.

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 и вы создали, что в вашем СИБ/раскадровки, добавьте еще IBOutlet к SaveTextViewController.

#import "TextView.h" 

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

@end 

Наконец, я также рекомендую вам переименовать saveText для сохраненияTextField, потому что это то, что оно есть. Кроме того, вы, кажется, используете нестандартные пользовательские данные ввода из текстовых полей и загружаете их в имена файлов. Это, как правило, плохая идея. Я бы рекомендовал вам подумать о том, что вы на самом деле пытаетесь сделать.Это потенциально опасно и может привести к потере данных и более интересным вещам.

Смежные вопросы