我用数组中的数据创建了一个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
答案 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