2010-10-04 6 views
1

У нас есть 2 файла 'MainViewController' и 'View01'
Первый файл addSubView второй.Вызвать родительскую функцию в xcode iphone development

В первом файле у нас есть функция с именем displayView.

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

часть View01 файла

#import "MainViewController.h" 

- (IBAction) changeView:id(sender){ 
     MainViewControlle *appDelegate = [[UIApplication sharedApplication] delegate]; 
     [appDelegate displayView:2]; 
} 

это правильный способ сделать это?

на данный момент я использую NSNotificationCenter для отправки активации функции :)

ответ

3

Вы должны попробовать использовать методы делегата :-)

Он работает так:

// Delegate 
@protocol MyViewDelegate <NSObject> 
- (void)myViewAskedForSomethingWithOrWithoutParameters; 

@end 

В вашей точки зрения вы должны иметь этот параметр:

id<MyViewDelegate> delegate; 

И затем в вашем Контроллер необходимо реализовать делегат

@interface MainViewController : UIViewController <MyViewDelegate> { 
} 

В вашей реализации необходимо добавить:

myView.delegate = self; 

И, наконец, на ваш взгляд, когда вам нужно вызвать функцию, просто сделать:

[ delegate myViewAskedForSomethingWithOrWithoutParameters ]; 

Удачи!

+0

Я вижу. любой хороший учебник по протоколу? :) спасибо вам обоим за ваши ответы – auslander

+0

Просто google it: http://www.google.com/search?q=iphone+protocol+delegate :-) первые ответы должны быть хорошими! например http://www.google.com/search?q=iphone+protocol+delegate – Vinzius

1

Если я не ошибаюсь, ваш код не должен работать. Вы попробовали это сами?

[[UIApplication sharedApplication].delegate] 

возвратит ваши AppDelegate, названное что-то вроде MyAppDelegate и не MainViewController. Однако, в зависимости от шаблона, который вы использовали или создан, ваш AppDelegate может содержать MainViewController-свойство, скорее всего, называется viewController, чтобы вы могли использовать

[appDelegate.viewController displayView:2]; 

Это быстрый способ сделать это. Для более аккуратного способа см. Ответ Винзиуса.

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