【发布时间】:2014-06-07 18:53:10
【问题描述】:
我有一个 tableview 作为父视图控制器和一个子模态视图控制器。在模态视图控制器中,当用户点击一行时,我想设置父级的属性“过滤器”。但是,它只是返回 null。
如何将 NSString 过滤器属性传递回其父视图?我应该在 didSelectRowAtIndexPath 方法中实例化父视图控制器吗?
更新:使用 Delegates 解决,关注 this tutorial。
下面是模态视图控制器的代码:
#import "FilterViewController.h"
#import "ContactsTableViewController.h"
@interface FilterViewController ()
@end
@implementation FilterViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.filterTable.dataSource = self;
self.filterTable.delegate = self;
[self performSelector:@selector(retrieveFilteredEvents)];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.filterEvents count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"filterTableCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
NSDictionary *tempDict = [self.filterEvents objectAtIndex:indexPath.row];
self.eventTitle = [tempDict objectForKey:@"eventType"];
cell.textLabel.text = self.eventTitle;
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary *tempDict = [self.filterEvents objectAtIndex:indexPath.row];
NSString *string = [tempDict objectForKey:@"eventType"];
ContactsTableViewController *contactVC = [[ContactsTableViewController alloc] init];
contactVC.filter = string;
[self dismissViewControllerAnimated:YES completion:nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"updateParent" object:nil];
}
#pragma mark - Helper Methods
- (IBAction)done:(id)sender
{
[self dismissViewControllerAnimated:YES completion:nil];
}
-(void)retrieveFilteredEvents
{
PFQuery *retrieveEvents = [PFQuery queryWithClassName:@"eventTypes"];
[retrieveEvents orderByAscending:@"eventOrder"];
[retrieveEvents findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
self.filterEvents = [[NSArray alloc] initWithArray:objects];
}
[self.filterTable reloadData];
}];
}
@end
【问题讨论】:
-
按照 Ankush Agrawal 和 CrimsonChris 的建议使用委托解决。协议方法有点过头了,但我会回来练习。谢谢大家!!
标签: ios objective-c cocoa-touch uiviewcontroller modalviewcontroller