2010-04-20 5 views
1

Я вхожу в класс в приложении на основе представления, которое создавалось с помощью одного контроллера вида.Доступ к представлению диспетчера просмотров

КОГДА Я внутри контроллера представления. Я могу получить доступ к его представлению, используя self.view, но как мне получить доступ к тому же представлению, если я внутри класса?

[[UIApplication sharedApplication] delegate]... //??? what do I put here? 

благодаря

ответ

1

Если предположить, что контроллер представления является членом вашего приложения делегата. Вы можете получить доступ к нему, как это: («YourAppDelegate» должен быть заменен фактическим именем типа вашего приложения делегат)

((YourAppDelegate *) [ [ UIApplication sharedApplication ] delegate ]).viewController.view;

+0

Да, контроллер просмотра является членом делегата, но этот ваш код дает мне сообщение «запрос для представления члена в чем-то, что не является структурой или объединением» ... другой вопрос: могу ли я иметь эту строку в общий способ? Я имею в виду, не указывая имя приложения? Я спрашиваю об этом, потому что эта строка должна использоваться для метода внутри одного сингла, который используется несколькими приложениями ... и я думаю, что эти скобки, которые вы указали, не используют правильный синтаксис. Благодарю. – SpaceDog

+0

Это будет работать без явного приведения, хотя компилятор даст вам предупреждение. Эта ошибка означает, что вид контроллера контроллера не существует. –

+3

Точечная нотация не будет работать без явного приведения в этом случае - в отличие от обычного синтаксиса отправки сообщений Obj-C, компилятор _needs_ должен знать, что класс отвечает на конкретное сообщение, если вы используете точечный синтаксис, в противном случае предполагается, что вы пытаясь получить доступ к члену структуры или объединения. Тем не менее, вы можете использовать следующее без приведения (и получить предупреждение компилятора, что плохо, поэтому вы не должны делать это в производственном коде): '[[[[UIApplication sharedApplication] delegate] viewController] view];' –

1

Если вы пытаетесь дать одноплодной ссылку на ваш основной ViewController, лучшее решение могло бы быть, чтобы получить ваш MyAppDelegate, чтобы установить свойство ViewController на вашем одноточечного при запуске:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{ 
    [MySingletonClass sharedSingleton].viewController = self.viewController; 
} 

Если вы планируете повторно использовать в Singleton, как это в нескольких проектах, часто имеет смысл установить эти рода свойств вашего AppDelegate.

0

Подраздел действительно не должен обрабатывать родительский вид, каждый класс должен управлять своим собственным представлением.

В любом случае, если ваш класс является подклассом UIView и является подзором viewController, вы можете получить представление viewController, обратившись к свойству superiew, чтобы получить родительское представление.

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