为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中添加我的自定义委托声明。
答案 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:^{
}];
}