Tableview详细信息

时间:2013-02-26 06:18:10

标签: ios uitableview

我用数组中的数据创建了一个tableview。现在我想要tableview的所有行的详细信息。如果我从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

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

而不是像这样做

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

做类似

的事情
  RecipeList = [[NSMutableArray alloc]init];
 [RecipeList addObject:dishObj];

其中dishObj是一个NSObject,Class 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;

答案 2 :(得分: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];
         } 
    }

答案 3 :(得分: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];   
}

答案 4 :(得分:0)

我希望以下教程对你来说很有用.. Segue