将来自presentViewController的值传递回presentViewController

时间:2013-06-29 00:58:23

标签: objective-c ios6 delegates modalviewcontroller

为IOS 6制作APP - 我有一个mainViewController,当点击按钮时会出现一个新的modalViewController。那个modalViewController有一个tableView。当用户点击一个单元格时,我想获取该单元格的值并将其分配给mainViewController上的变量。

问题是当我在viewDidAppear方法中输出它时,我总是得到NULL。

这是modalViewController中的委托方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{ 
    NSMutableString *event_id = [[self.events valueForKey:@"event_id"] objectAtIndex:indexPath.row];
    NSLog(@"EVENT ID = %@", event_id); //This gives me actuall ID


    [self.presentingViewController dismissViewControllerAnimated:YES completion:^{
        [self.mainViewController setEventID:event_id];
    }];
}

如果您看到我使用完成块来设置它。在我的mainViewController中,我有一个eventID属性。在我的modalViewController中我也有

@class MainViewController

@interface ModalViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate>{
    IBOutlet UITableView *eventsTable;
}

@property (strong, nonatomic) MainViewController *mainViewController;

@end

出于某种原因,当我尝试在viewDidAppear中输出eventID时,我将eventID始终为NULL,但是当我第一次设置它时它确实输出了它。我在那里错过了什么?

非常感谢任何帮助。

修改

在我的MainViewController中,我已经设置了其他代理:

@interface MainViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate, UIAlertViewDelegate, CLLocationManagerDelegate>

使用协议委托方法,如何在ModalViewControllerDelegate中添加我的自定义委托声明。

2 个答案:

答案 0 :(得分:1)

将协议/委托添加到ModalViewController,并通过订阅该委托将其用于与MainViewController进行通信。像下面这样的东西。 (未经测试,但给你的想法)。当你提出你的模态视图时,一定要设置你的委托。

Study this link如果您还有问题

ModalViewController *modal = (ModalViewController *)[[ModalViewController alloc]init];
modal.delegate = self;
[self presentModalViewController: modal animated:YES];

ModalViewController.h

@protocol ModalViewControllerDelegate <NSObject>
-(void)setEventID:(id)event_ID;
@end

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

ModalViewController.m

[_delegate setEventID:event_ID];

MainViewController.h

#import "ModalViewController.h"

MainViewController @interface ModalViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate, ModalViewControllerDelegate>

MainViewController.m

-(void)setEventID:(id)event_id
{
    [self setEventID:event_id];
}

答案 1 :(得分:0)

试试这个:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{ 
    NSMutableString *event_id = [[self.events valueForKey:@"event_id"] objectAtIndex:indexPath.row];
    NSLog(@"EVENT ID = %@", event_id); //This gives me actuall ID

    [self.mainViewController setEventID:event_id];
    [self.presentingViewController dismissViewControllerAnimated:YES completion:^{

    }];
}