我读了有关SplitViewControllers的文章,但由于我不了解某些内容,所以我正围着圈子走。
您有一个masterviewcontroller和一个popoverview作为条形按钮项(过滤器)
可以说masterviewcontroller是一个表视图,而在popoverview中是一个uiview控制器
在iphone上,我总是分配了masterviewcontroller并经过一些修改后更新了引用,当您单击“搜索”按钮时,它推了一个具有新数据的新控制器(来考虑一下,也许这不是最好的主意),因为现在逻辑不再工作了。
我读过您必须互相引用控制器,所以我做到了。
在filtercontroller中(这是popoverview)
.h
@property (strong, nonatomic) MasterViewController *masterviewController;
@property (weak, nonatomic) IBOutlet UISlider *filterPrice;
- (IBAction)filterSearch:(id)sender;
.m
- (IBAction)filterSearch:(id)sender {
self.masterviewController.filterSearchPrice = [NSNumber numberWithInt:self.filterPrice.value];
[self.masterviewController performFilterSearch];
}
performFilterSearch检查字段,使用过滤器名称和json对象返回一个URL调用,解析并重新加载数据。
现在我希望masterviewcontroller显示新数据,但是不会发生,实际上什么也没发生...
更新这是FilterSearch:
-(void)performFilterSearch
{
[queue cancelAllOperations];
[[AFImageCache sharedImageCache] removeAllObjects];
[[NSURLCache sharedURLCache] removeAllCachedResponses];
isLoading =YES;
[self.tableView reloadData];
searchResults = [NSMutableArray arrayWithCapacity:10];
NSURL *url = [self urlFilterWithSearchPrice:filterSearchPrice];
NSLog(@"%@",url);
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation
JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
[self parseDictionary:JSON];
isLoading = NO;
[self.tableView reloadData];
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
[self showNetworkError];
isLoading = NO;
[self.tableView reloadData];
}];
operation.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];
[queue addOperation:operation];
}
顺便说一句,当我Nslog在filterSearch中以检查其是否已更新:
NSLog(@"%d",self.masterviewController.filterSearchPrice);
NSLog(@"%d",[self.filterTypeSegmentedControl selectedSegmentIndex]);
第一个永远不会更新,第二个永远不会更新
更新2 :(如何启动popview):
我在具有操作的masterviewcontrollers导航上添加了一个条形按钮项。
我从masterviewcontroller-> filtercontroller添加了一个popover segue
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
filterPopOver = [(UIStoryboardPopoverSegue *)segue popoverController];
}
- (IBAction)filterPopButton:(id)sender {
if (filterPopOver){
[filterPopOver dismissPopoverAnimated:YES];
}
else{
[self performSegueWithIdentifier:@"showFilterPopover" sender:sender];
}
}
最佳答案
当启动filterController时,您需要传递对MasterViewController的引用。您在过滤器控制器中拥有一个属性,但从未为该属性分配值。
编辑后:
您的prepareForSegue方法应如下所示:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
FilterController *fc = (FilterController *)segue.destinationViewController;
fc.masterViewController = self;
}
确保已将MasterViewController.h导入FilterController.m
关于ios - SplitViewController引用逻辑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14295169/