1

я пытаюсь использовать этот пакет:Как передать данные из формы FormSeetController в ViewController?

https://github.com/m1entus/MZFormSheetController

теперь мой вопрос, я пытаюсь передать данные между FormSeetController к ViewController после я уволить formSheet.

здесь то, что я пытался до сих пор: в ViewController в кнопке, которая CREAT форму:

formSheet.didDismissCompletionHandler = ^(UIViewController *vc){ 
// maybe i can use UIViewController *vc as my SearchGardenView (form Sheet), but how? 

    [self formSheetDidDismissed]; // here i tryin to get the kidGardenID but its always nil; 
}; 

и это в от FormSeetController:

AddKid *kid = [[AddKid alloc]init]; 
    NSArray *temp = [_responseDict valueForKey:@"ID"]; 
    kid.kidGardenID = [temp objectAtIndex:indexPath.row]; 

    [self mz_dismissFormSheetControllerAnimated:YES completionHandler:^(MZFormSheetController *formSheetController) { 

     //this block dismiss the formSheet. 
}]; 

им необходимо пройти «kidGardenID» для ViewController, но всегда он равен нулю, даже после того, как я дал ему значение, как показывает код выше. возможно потому, что ViewController уже загружен, и когда я вернулся из fortSheet, он снова не загружается?

Мне нужно найти способ передать эти данные, не могли бы вы мне помочь?

EDIT Я попытался использовать делегата с успехом, делегат не вызывается. вот мой делегат код:

установки делегата (ViewControllerB)

@class SearchGardenTable; 
@protocol SearchGardenDelegate <NSObject> 
- (void)addItemViewController:(SearchGardenTable *)controller didFinishWithGardenID:(NSString *)gardenID gardenName:(NSString*)gardenName andCityName:(NSString*)cityName; 
@end 

@interface SearchGardenTable : UITableViewController 

@property (nonatomic, weak) id <SearchGardenDelegate> delegate; 
@end 

говорить VC B, что VC А его представитель:

self.searchGarden.delegate = self; // in VC A viewDidLoad. 

настройки параметров я хочу передать обратно от VC B до VC A:

_kidGaedenID = [temp objectAtIndex:indexPath.row]; 
    _kidGardenName = [temp1 objectAtIndex:indexPath.row]; 


    [self.delegate addItemViewController:self didFinishWithGardenID:_kidGaedenID gardenName:_kidGardenName andCityName:_kidCityName]; 

реализовать метод протокола a т VC A:

- (void)addItemViewController:(SearchGardenTable *)controller didFinishWithGardenID:(NSString *)gardenID gardenName:(NSString*)gardenName andCityName:(NSString*)cityName 
{ 
    _kidGardenID = gardenID; 
    _gardenName.text = gardenName; 
    _kidCity.text = cityName; 

} 

ответ

0

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

Если вы еще не создали каких-либо делегатских протоколов, то, прочитав этот учебник и воспользовавшись им несколько раз, вы обнаружите, что используете его много.

Есть много хорошего учебника по этому поводу, хотя здесь это хорошее место, чтобы начать

Create your own Objective-C Delegate Protocol

Надеется, что это помогает

1

Вы можете попробовать willDismissCompletionHandler вместо этого. Это определено в файле MZFormSheetController.h. Введите аргумент представленныйViewController вашему контроллеру представления (AddKid я предполагаю), и вы можете получить доступ к свойствам класса AddKit.

@property (nonatomic, copy) MZFormSheetCompletionHandler willDismissCompletionHandler; 

formsheet.willDismissCompletionHandler = ^(UIViewController *presentedViewController){ 
((AddKid*)presentedViewController).kidGardenID // should be accessible now. 

};

+0

Заключительное приложение из-за неперехваченного исключения «NSInvalidArgumentException», причина: '- [MZNavigationView kidGaedenID]: непризнанный селектор, отправленный в экземпляр 0x10e1907f0' – OshriALM

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