在我的recipeBook应用程序中,我有两个UITableViewControllers。第一个UITableViewController包含一个UITableView,其中包含配方名称列表。如果选择一个单元格,您将转到第二个UITableViewController。第二个UITableViewController包含一个带有成分列表的UITableView。
在我的应用程序中,我使用RecipeObject类,它包含两个属性(名称(类型:NSString)和成分(类型:NSArray)。配方对象都在RecipeData类中声明,如下所示:
RecipeObject *recipe1 = [[RecipeObject alloc]init];
recipe1.name = @"Fresh Coconut Cake";
recipe1.ingredients = [NSArray arrayWithObjects:@"Coconut cups", @"Milk", @"Baking powder", @"Butter", @"Sugar", @"Eggs", nil];
在第一个UITableViewController中,我设法打印出每个单元格的配方名称。请参阅以下代码:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellIdentifier = @"recipeCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
TostiObject *recipes = [self.recipes objectAtIndex:indexPath.row];
cell.textLabel.text = recipes.name;
return cell;
我在名为self.recipes的First UITableViewController中声明了一个NSArray属性来连接RecipeData。我还在第二个UITableViewController中执行了以下操作。
self.recipes = [RecipeData allRecipes];
问题发生在第二个UITableViewController:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellIdentifier = @"ingredientCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
RecipeObject *recipe = [self.recipes objectAtIndex:indexPath.row];
cell.textLabel.text = [recipe.ingredients objectAtIndex:indexPath.row];
return cell;
因为cell.textLabel.text只接受NSString值而recipe.ingredients是NSArray。我想将成分数据(NSArray)连接到第二个UITableViewController中的cell.textLabel.text。
也许有人可以帮我解决这个问题。所有帮助都非常感谢!
prepareForSegue方法(第一个UITableViewController):
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"ingredients"]) {
SecondTableViewController *IngredientsTVC = (SecondTableViewController *)segue.destinationViewController;
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
RecipeObject *recipe = [self.recipes objectAtIndex:indexPath.row];
IngredientsTVC.recipeContainer = recipe.ingredients;
答案 0 :(得分:0)
您应该只将一个配方对象传递给第二个表视图控制器(因此我不明白您在RecipeObject *recipe = [self.recipes objectAtIndex:indexPath.row]
中使用cellForRowAtIndexPath
的原因)。然后,您可以使用recipe.ingredients作为用于填充表的数组。您仍然可以在cellFroRowAtIndexPath中使用此行,
cell.textLabel.text = [recipe.ingredients objectAtIndex:indexPath.row];
您还应该将recipe.ingredients.count
传递给numberOfRowsInSection
。
编辑后:
有些事情并不清楚你在做什么。您似乎希望SecondTableViewController显示来自第一个控制器的单个所选配方的成分列表。所以,首先,根本不需要在SecondTableViewController中使用行self.recipes = [RecipeData allRecipes]
;控制器只需要知道通过prepareForSegue传递的一个配方。我假设recipeContainer是SecondTableViewController的数组属性,它是成分数组;这就是填充表格所需要的(顺便说一句,没有必要在prepareForSegue中传递它,因为你可以从你传递的配方对象中获取它)。所以,你应该这样做的方法是,首先,删除你在prepareForSegue中显示的最后一行;你不需要它。
在SecondTableViewController .h
中@property (strong,nonatomic) RecipeObject *recipe;
在SecondTableViewController .m
中@interface SecondTableController ()
@property (strong,nonatomic) NSArray *ingredients;
@end
@implementation SecondTableController
- (void)viewDidLoad {
[super viewDidLoad];
self.ingredients = self.recipe.ingredients;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.ingredients.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.textLabel.text = self.ingredients[indexPath.row];
return cell;
}
如果需要,可以使用self.title = recipe.name