У меня есть класс viewcontroller для моего единственного текущего представления и другого класса со статическими методами для моей математической логики. Класс ViewController имеет IBOutlet для метки. Как я могу ссылаться на эту розетку из функций моего класса Logic?Как получить доступ к выходам главного контроллера представления из логического класса?
ответ
Вы можете передать указатель на логический класс, как и любую другую переменную, но я бы не рекомендовал напрямую обращаться к свойству IBOutlet.
Что бы я рекомендовал, либо имеет логический класс, возвращающий значения, либо контроллер обновляет метку по мере необходимости, либо если она связана с фоновой обработкой, которая не возвращается сразу, используйте шаблон делегата. Таким образом, логический класс будет информировать контроллер, когда данные будут готовы или вычисления будут завершены, а затем контроллер может обновить интерфейс по мере необходимости.
Посмотрите в IOS протоколы, чтобы определить структуру класса делегата :)
Вы не должны позволить вашему Logic класса доступа к управлению UI, поскольку он не соответствует Model-View-Controller шаблон, который является разумным способом сохранить ваш код организованным так, чтобы он проще, поскольку ваш проект становится более сложным. Вместо этого вы хотите, чтобы ваш ViewController
связывался между UI и классом Logic
для вас.
Например, если у вас кнопку Calculate в нижней части вашей точки зрения, что пользователь краны, кран должен быть обработан ViewController
. ViewController
вызовет функцию в вашем классе Logic
, который может вернуть значение. Затем значение ViewController
примет это значение и задает его как текст метки. Вот фрагмент кода, который иллюстрирует идею:
- (IBAction) calculateSomeValue: (id) sender {
int result = [Logic calculateValue];
[self.label setText: [NSString stringWithFormat: @"Your result is: %d", result]];
}