我在storyboard中创建了两个tableViewControllers: 类别和商店。 当我选择一个类别时,它应该显示该类别中的所有商店。 (我从服务器获取商店数据,但我在网址中设置了固定类别,因此无论如何都应该获取相同的两个商店。)
奇怪的是,当我选择一个类别时,storesController显示为空, 但如果我把它设置为初始控制器,它就可以工作。
StoreTableViewController_as_initial.png
StoreTableViewController_from_categories.png
这就是我在storeController中设置单元格的方式。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
StoresCell *cell = [tableView dequeueReusableCellWithIdentifier:@"storetile"];
if(cell == nil){
cell = [[StoresCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"storetile"];
}
cell.storelabel.text = [[_results objectAtIndex:[indexPath row]]objectForKey:@"name"];
[cell.storelabel sizeToFit];
cell.subtitleOneLabel.text=[[_results objectAtIndex:[indexPath row]]objectForKey:@"neighborhood"];
cell.subtitleTwoLabel.text = [[_results objectAtIndex:[indexPath row]]objectForKey:@"city"];
NSString *distance = [NSString stringWithFormat:@"~%@ km",[[_results objectAtIndex:[indexPath row]]objectForKey:@"distance"]];
cell.distanceLabel.text = distance;
NSString *imgPath = [[_results objectAtIndex:[indexPath row]]objectForKey:@"imgUrl"];
UIImage *thumb = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://andrafterdevelopment.com.br/apps/buscaabc/img/%@",imgPath]]]];
[cell.thumbImage setImage:thumb];
return cell;
}
我在返回时断开,方法总是被调用,但是当它来自categoriesController时,我单元格中的所有标签都是零。
这就是我从categoriesController
调用storeController的方法-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:
(NSIndexPath *)indexPath{
NSDictionary *item = [_results objectAtIndex:[indexPath row]];
BOOL hasSub = [[item objectForKey:@"hasSub"] boolValue];
StoreTableViewController *storesTableViewController = [[StoreTableViewController alloc]init];
//storesTableViewController.title = [item valueForKey:@"name"];
//storesTableViewController.category = (int)[item valueForKey:@"id"];
[storesTableViewController.tableView registerClass:[StoresCell class] forCellReuseIdentifier:@"storetile"];
[self.navigationController pushViewController:storesTableViewController animated:YES];
}
我猜这与自定义单元格有关,或者我这样做是错误的。
答案 0 :(得分:0)
我猜您已将_results
声明为StoreTableViewController
中的财产了吗?
如果是这样,请将您的categoriesController
方法更改为:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:
(NSIndexPath *)indexPath{
NSDictionary *item = [_results objectAtIndex:[indexPath row]];
BOOL hasSub = [[item objectForKey:@"hasSub"] boolValue];
StoreTableViewController *storesTableViewController = [[StoreTableViewController alloc]init];
storesTableViewController.title = [item valueForKey:@"name"];
storesTableViewController.category = (int)[item valueForKey:@"id"];
[self.navigationController pushViewController:storesTableViewController animated:YES];
}
在viewDidLoad中注册单元格。
答案 1 :(得分:0)
如果您使用Storyboard,则应通过Storyboard创建控制器。
在Storyboard ID
中为Identity inspector
设置StoreTableViewController
并更改您的方法:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:
(NSIndexPath *)indexPath{
NSDictionary *item = [_results objectAtIndex:[indexPath row]];
BOOL hasSub = [[item objectForKey:@"hasSub"] boolValue];
StoreTableViewController *storesTableViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"storyboard id"];
storesTableViewController.title = [item valueForKey:@"name"];
storesTableViewController.category = (int)[item valueForKey:@"id"];
[self.navigationController pushViewController:storesTableViewController animated:YES];
}
或者您可以使用segues
并在StoreTableViewController
方法中配置prepareForSegue
:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"StoreTableViewControllerSegureIdentifier"]) {
StoreTableViewController *storesTableViewController = segue.destinationViewController;
storesTableViewController.title = _selectedItem.title;
storesTableViewController.category = _selectedItem.identifier;
}
}
答案 2 :(得分:0)
我认为你应该检查一些代码。
当您打开所选类别的第二个视图控制器时,您的服务是否为您提供数据?
如果您正在获取数据,那么它是否以正确的方式填充数组?
如果上面的所有内容都没问题,那么在填充数组中的数据后,您是否已调用[tableView reloadData]
方法。