0

我用数组中的数据创建了一个表格视图。现在我想要 tableview 的所有行的详细信息。如果我从表格视图中选择任何食谱,它应该向我显示准备该食谱的所有成分和程序,并在顶部带有该特定食谱的图片。我是这个领域的新手,所以请帮忙。

这是“ViewController.m”

#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
RecipeList = [[NSMutableArray alloc]init];
[RecipeList addObject:@"Chicken Kabab"];
[RecipeList addObject:@"Chicken Tikka"];
[RecipeList addObject:@"Chicken 65"];
[RecipeList addObject:@"Chicken Do Pyaza"];
CGRect frame = self.view.frame;
RecipeTable = [[UITableView alloc]initWithFrame:frame style:UITableViewStylePlain];
RecipeTable.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
RecipeTable.backgroundColor = [UIColor cyanColor];
RecipeTable.delegate = self;
RecipeTable.dataSource = self;
[self.view addSubview:RecipeTable];
[RecipeTable setScrollEnabled:YES];
[RecipeTable setUserInteractionEnabled:YES];
[RecipeTable setRowHeight:35];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return @"RECIPES";
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

return RecipeList.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
cell.textLabel.text = [RecipeList objectAtIndex:indexPath.row];
return cell;

}
@end
4

5 回答 5

0

您必须使用 UITableView 的 DidSelectRow 代表。然后,如果您选择一个配方,它会调用 DidSelectRow 委托。在此委托中,您进行编码以推送到新的 ViewController 。在新的 ViewController 之上创建一个 UIImageView ,然后将图像从 TableViewCell 传递到新 viewController 的 UIImageView

于 2013-02-26T06:51:55.420 回答
0

如果您希望将特定 Dish 的详细信息填充到另一个被推送的 ViewController 中,最简单的方法是创建一个NSObject,其中包含该特定菜肴所需的所有详细信息并将其维护为一个数组。当您在 tableView 中选择一行时,didSelectRowAtIndexPath:获取该 indexPath 处的对象并将其传递给正在推送的下一个 VC。在详细信息 VC 中,您可以使用对象中的详细信息填充详细信息。

而不是这样做

  RecipeList = [[NSMutableArray alloc]init];
 [RecipeList addObject:@"Chicken Kabab"];

做类似的事情

  RecipeList = [[NSMutableArray alloc]init];
 [RecipeList addObject:dishObj];

其中 disObj 是一个 NSObject,属于 Dish 类,其中包含 Dish 名称、图像和食谱。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }
    Dish *dishObject = [RecipeList objectAtIndex:indexPath.row];
    cell.textLabel.text = dishObject.dishName;
    return cell;
于 2013-02-26T07:08:19.057 回答
0

只需将配方名称传递给 detailViewController。然后根据配方的名称,您可以在 UIImageView 中加载合适的图像。在代码 recipename 是 detailViewController 中的 NSString。将其声明为属性..

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{   
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
    NSString *name=[recipe objectAtIndex:indexPath.row];
      detailViewController.recipename=name; 
    [self.navigationController pushViewController:detailViewController animated:YES];

}

然后在detaiViewController.m

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        if([recipename isEqualToString:@"Pizza"])
         {
           UIImage *image = [UIImage imageNamed: @"pizza.png"];
           [img setImage:image];
         }
        else if([recipename isEqualToString:@"Chicken 65"])
         {
           UIImage *image = [UIImage imageNamed: @"chicken.png"];
           [img setImage:image];
         } 
    }
于 2013-02-26T07:21:11.880 回答
0

试试这个,你必须使用 UITableView 的 DidSelectRow 委托

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Navigation logic may go here. Create and push another view controller.

 DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
NSString *strDishName = [RecipeList objectAtIndex:indexPath.row];
detailViewController.strDishDetail =strDishName;
 // ...
 // Pass the selected object to the new view controller.
 [self.navigationController pushViewController:detailViewController animated:YES];   
}
于 2013-02-26T07:30:55.823 回答
0

我希望下面的教程对你有用.. Segue

于 2013-02-26T10:42:25.453 回答