【问题标题】:How to pass data from form FormSeetController to the ViewController?如何将表单 FormSeetController 中的数据传递给 ViewController?
【发布时间】:2014-07-27 15:58:34
【问题描述】:

我正在尝试使用这个包:

https://github.com/m1entus/MZFormSheetController

现在我的问题是,我在关闭 formSheet 后尝试在 FormSeetController 之间传递数据到 ViewController。

这是我到目前为止所尝试的: 在创建表单的按钮中的 ViewController 中:

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 回来时它没有再次加载?

我需要找到一种方法来传递这些数据, 你能帮帮我吗?

编辑 我尝试使用委托但没有成功,委托没有被调用。 这是我的委托代码:

设置委托(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 A 是它的代表:

 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];

在VC A实现协议方法:

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

}

【问题讨论】:

    标签: ios objective-c uiviewcontroller delegates objective-c-blocks


    【解决方案1】:

    您可以尝试 willDismissCompletionHandler 代替。这是在 MZFormSheetController.h 文件中定义的。将参数presentedViewController 输入到您的视图控制器(我假设为AddKid),您可以在此处访问AddKit 类的属性。

    @property (nonatomic, copy) MZFormSheetCompletionHandler willDismissCompletionHandler;
    
    formsheet.willDismissCompletionHandler = ^(UIViewController *presentedViewController){
    ((AddKid*)presentedViewController).kidGardenID // should be accessible now.
    

    };

    【讨论】:

    • 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[MZNavigationView KidGaedenID]:无法识别的选择器发送到实例 0x10e1907f0”
    【解决方案2】:

    为了将详细信息传递回您的父视图控制器,您应该设置一个委托协议,该协议将完全允许您正在寻找什么。

    如果您之前没有创建过任何委托协议,那么一旦您阅读了本教程并使用了几次,您就会发现您经常使用它。

    有很多很好的教程,虽然这里是一个很好的起点

    Create your own Objective-C Delegate Protocol

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2018-03-21
      • 1970-01-01
      • 2012-11-01
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      相关资源
      最近更新 更多