ios - 如何将数据从表单 FormSeetController 传递到 ViewController?

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

我正在尝试使用这个包:

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,但它始终为 nil,即使在我给它一个值之后,如上面的代码所示。 可能是因为 ViewController 已经加载,而当我从 fortSheet 返回时它没有再次加载?

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

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

设置委托(delegate)(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 是它的委托(delegate):

 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 实现协议(protocol)方法:

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

}

最佳答案

您可以尝试使用 willDismissCompletionHandler。这是在 MZFormSheetController.h 文件中定义的。将参数 presentedViewController 键入您的 View Controller (我假设是 AddKid),您可以在此处访问 AddKit 类的属性。

@property (nonatomic, copy) MZFormSheetCompletionHandler willDismissCompletionHandler;

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

};

关于ios - 如何将数据从表单 FormSeetController 传递到 ViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24982712/

相关文章:

ios - 如何将 ViewController 部分呈现在另一个 ViewController 上并且仍然能够与底部的 ViewController 交互?

ios - 插入 View 时显示白屏

ios - 三 View 之间使用UIScrollView到 "rotate"

ios - 如何获取NSString中最后一个字母之前的字符?

ios - UIWebView 无法加载 RSS 页面

iOS 9 使用 UIFont(name : ". SFUIText) 发现 nil

ios - 电子邮件、密码、姓名的 UITextField 验证

ios - 如何创建具有透明渐变背景的 UIView 子类?

ios - 为什么在 SwiftUI 的 TabView 中切换选项卡时 onDisappear 之后再次调用 onAppear?

iOS:MKMapView 在调试配置下加载非常慢