2010-08-17 3 views
0

У меня есть приложение iPhone, где я показываю страницу параметров с помощью модального видаReload ParentViewController

[self presentmodalviewcontroller:tempcontroller animated:yes];

Когда пользователь заканчивает настройку он может вернуться на предыдущую страницу.

[self.dismissmodalviewcontroller animated:YES]; 

Теперь я хочу перезагрузить свою главную страницу, когда пользователь вернется с страницы настроек. Я прочитал некоторые, где я должен использовать @protocol and delegate, чтобы это произошло. Я прочитал некоторые из руководств в Интернете по этой теме. Но я не смог этого сделать. У меня нет знаний о @protocol and delegate, поскольку я новичок в разработке iPhone.

Пожалуйста, помогите мне с некоторыми хорошими учебниками. Было бы жадно, если бы вы предложили мне любую ссылку, содержащую пошаговое описание моей потребности.

Ждем вашей помощи ....

Заранее спасибо

Joy

ответ

2

Еще один простой вариант - использовать NSNotificationCenter.Посмотрите на этот

sending data to previous view in iphone

+0

Центр NSNotification семантически отделяет модальный вид от корня ... это «не имеет смысла, потому что это отношения« один к одному », а один - явный делегат другого. – DexterW

0

Джой,

Допустим, у вас есть ViewController, что представляет другой модально - назовем это " корень».

Модальное называется "модальный"

"Root" собирается сказать,

[self presentModalViewController:Modal]; 

Так как же Root знает, когда уволить Modal? Лучший способ сделать это - сделать «протокол» для этого поведения.

В файле заголовка для модальных, будет такой код:

@protocol ModalViewDelegate <NSObject> 

-(void)modalViewControllerDidFinish:(UIViewController *)viewController; 

@end 

Тогда, должно быть переменная экземпляра для модального:

id<ModalViewDelegate> delegate; 

со свойством:

@property (assign) id<ModalViewDelegate> delegate; 

Это делает так, что каждый раз, когда Modal отправляет сообщение своему «делегату», мы знаем, что он имеет метод - (void) modalViewControllerDidFinish:

Итак, скажем, есть кнопка внутри Модаля, которую вы хотите закрыть. Кнопка просто нужно вызвать [delegate modalViewControllerDidFinish:self];

В файле заголовка для корня, вы объявляете класс как это:

@class Root : UIViewController <ModalViewDelegate> 

И вы реализуете метод modalViewControllerDidFinish как это:

-(void)modalViewControllerDidFinish:(UIViewController *)controller { 
    // any action you need to take on controller 
    [self dismissModalViewControllerAnimated:YES]; 
} 

делает это смысл?

+0

Спасибо Greelmo за подробный ответ. Я реализовал это, но он дал мне ошибку - [UIView modalViewControllerDidFinish:]: нераспознанный селектор отправлен в экземпляр 0xd38280 Не знаете, почему ??? – Joy

+0

вы должны сказать Modal.delegate = root; убедитесь, что вы реализовали этот метод в корне. Прочитайте немного. Это рекомендуемое решение для яблока. – DexterW