Xcode 4.2 и раскадровка, как получить доступ к данным из другого класса? - PullRequest
0 голосов
/ 11 марта 2012

Мне было интересно, как я мог получить доступ к данным из другого класса, используя Xcode 4.2 и раскадровку?Скажите, например, как бы я получил доступ к тексту текстового поля из другого класса?Google не помог, и урок на MyCodeTeacher.com об этом устарел и больше не работает ...

Спасибо за терпение со мной!

-Shredder2794

Ответы [ 2 ]

3 голосов
/ 11 марта 2012

Не уверен, что это единственный или лучший способ, но вы можете создать свойство в файле .h целевого представления и установить для него значение до того, как будет выполнена передача

в контроллере конечного представления.h файл:

@interface YourDestinationViewController : UIViewController
{
    NSString* _stringToDisplay;
    //...
}
    @property (nonatomic, retain) NSString* stringToDisplay;        
    //...

и в файле .m представляемого представления

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    YourDestinationViewController*viewController = segue.destinationViewController;
    viewController.delegate = self;
    viewController.stringToDisplay = @"this is the string";
}

Затем вы можете делать то, что хотите, со свойством в зависимости от того, какое представление viewWillAppear / viewDidLoad / viewDidAppear / etc,методы лучше всего соответствуют вашим целям в файле .m целевого представления

И затем, чтобы проверить, работает ли он, в файле .m контроллера целевого представления:

-(void)viewWillAppear:(BOOL)animated
{
    NSLog(@"self.stringToDisplay = %@", self.stringToDisplay);
    ...
    //and if a label was defined as a property already you could set the 
    //label.text value here
}

Редактировать: добавлено больше кода,и сделал его менее общим

1 голос
/ 11 марта 2012

Это не относится к раскадровке.Есть несколько способов сделать то, что вы пытаетесь сделать.Вы можете объявить переменную в вашем AppDelegate (NSString) и установить ее в своем первом классе.Затем во втором классе получите доступ к переменной AppDelegate и используйте ее для установки метки.Код для этого:

AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
label.text = appDelegate.myString;

Другой способ сделать это (возможно, самый простой) - объявить строку NSString во втором классе.Затем в вашем первом классе, прежде чем нажать второе представление, установите эту строковую переменную.Примерно так:

MyViewController *vc = [[MyViewController alloc] initWithNibName:@"" bundle:nil];
vc.myString = @"";

Третий способ сделать это - использовать делегатов.Это самый «сложный» способ, но самый лучший.Вы должны создать делегата, который будет вызван, когда появится ваше второе представление.Затем делегат может вернуть вам значение из первого класса.

Вы также можете использовать новый блок обработчика завершения в iOS 5 pushViewController: метод.

Редактировать:

Пользовательский метод init:

- (void)initWithNibName:(NSString *)nibName bundle:(NSString *)bundle string:(NSString *)myString

А затем, когда вы нажимаете на представление, просто классифицируйте этот метод и задайте строку через него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...