-1

我有一个UITableViewController从名为 userList 的 NSMutableArray 填充的数据。选择特定用户后,它会转到详细视图,但不会在.(Detailview) 中显示数据。我正在使用故事板。这是我的示例代码UITextviewUIImageviewUIView

请给我任何想法。提前致谢。

表视图控制器.m

- (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.
//  tableData=[NSArray arrayWithObjects:@"Alto",@"Estilo",@"Swift",@"Honda CRV",@"Ritz", nil];

thumbnails=[NSArray arrayWithObjects:@"car1.jpg",@"car2.jpg",@"car3.jpg",@"car4.jpg",@"car5.jpg", nil];

Car *car1=[Car new];
car1.carName=@"Alto";
car1.imageFile=@"Exotic_Car_-_Bugatti.jpg";
car1.carDetails=[NSArray arrayWithObjects:@"Harsha    Mar05,2019",@"Registration   AP2911234",@"Model Year   2009",@"CarModel   Alto",@"Engine   StreamEngine",@"Petrol   Petrol",@"Exterior Color   Black",@"interior Color   Grey",@"Fuel Economy   1000",@"Insurance   Insurance",@"Life time tax   Free", nil];

Car *car2=[Car new];
car2.carName=@"Estilo";
car2.imageFile=@"images.jpg";
car2.carDetails=[NSArray arrayWithObjects:@"Harsha    Mar05,2019",@"Registration   AP2911234",@"Model Year   2009",@"CarModel   Alto",@"Engine   StreamEngine",@"Petrol   Petrol",@"Exterior Color   Black",@"interior Color   Grey",@"Fuel Economy   1000",@"Insurance   Insurance",@"Life time tax   Free", nil];

Car *car3=[Car new];
car3.carName=@"Swift";
car3.imageFile=@"images1.jpg";
car3.carDetails=[NSArray arrayWithObjects:@"Harsha    Mar05,2019",@"Registration   AP2911234",@"Model Year   2009",@"CarModel   Alto",@"Engine   StreamEngine",@"Petrol   Petrol",@"Exterior Color   Black",@"interior Color   Grey",@"Fuel Economy   1000",@"Insurance   Insurance",@"Life time tax   Free", nil];

Car *car4=[Car new];
car4.carName=@"Honda CRV";
car4.imageFile=@"index.jpg";
car4.carDetails=[NSArray arrayWithObjects:@"Harsha    Mar05,2019",@"Registration   AP2911234",@"Model Year   2009",@"CarModel   Alto",@"Engine   StreamEngine",@"Petrol   Petrol",@"Exterior Color   Black",@"interior Color   Grey",@"Fuel Economy   1000",@"Insurance   Insurance",@"Life time tax   Free", nil];

Car *car5=[Car new];
car5.carName=@"Ritz";
car5.imageFile=@"Sport_Super_car.jpg";
car5.carDetails=[NSArray arrayWithObjects:@"Harsha    Mar05,2019",@"Registration   AP2911234",@"Model Year   2009",@"CarModel   Alto",@"Engine   StreamEngine",@"Petrol   Petrol",@"Exterior Color   Black",@"interior Color   Grey",@"Fuel Economy   1000",@"Insurance   Insurance",@"Life time tax   Free", nil];

tableData=[NSArray arrayWithObjects:car1,car2,car3,car4,car5, nil];


}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

return [tableData count];

}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

 static NSString *simpleTableIdentifier=@"CarCell";

UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

if (cell == nil) 
{

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];

 }


Car *car = [tableData objectAtIndex:indexPath.row];

cell.textLabel.text = car.carName;
cell.imageView.image = [UIImage imageNamed:[thumbnails objectAtIndex:indexPath.row]];
    return cell;

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

return 78;

}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

{
    if ([segue.identifier isEqualToString:@"showcardetails"]) 

{

 NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];


CarDetailviewViewController *destViewController = segue.destinationViewController;

destViewController.car = [tableData objectAtIndex:indexPath.row];

 // Hide bottom tab bar in the detail view
destViewController.hidesBottomBarWhenPushed = YES;


}

}

CarDetailviewcontroller.m

@synthesize carPhoto;
@synthesize cardetailsTextView;
@synthesize car;

- (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view.
self.title = car.carName;
self.carPhoto.image = [UIImage imageNamed:car.imageFile];

NSMutableString *ingredientText = [NSMutableString string];

for (NSString* ingredient in car.carDetails) 
{

[ingredientText appendFormat:@"%@\n", ingredient];

}

self.cardetailsTextView.text = ingredientText;

}
4

4 回答 4

1

在你的CarDetailviewcontroller.m你必须分配你的变量类型car

如果carstring你做那样的事情

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
           car = [[NSString all]init];
        }
        return self;
    }

我希望在那之后你的代码可以正常工作

于 2013-08-20T10:55:58.600 回答
0

由于 detailviewcontroller 已经初始化,它不会显示任何更改,请在公共方法中添加所有更改并在您完成以下操作后调用它:

destViewController.car = [tableData objectAtIndex:indexPath.row];
于 2013-08-20T17:30:12.360 回答
0

如果您使用故事板,有一个很好的方法:使用 segues。

  1. 在情节提要中,从 tableview 单元格 crtl 拖动到目标视图控制器。

  2. 选择连接线中形成 segue 的圆圈,然后在属性编辑器中转到第四部分,并在标识符字段中为 segue 命名,例如“pushToDetail”。

  3. 在起始表视图控制器的代码中添加一个名为...的方法

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

  4. 在这种方法中,您可以使用它接收到的 segue 变量来引用目标视图控制器并向其发送一些数据。例如:

    CarDetailViewController *carDetailVC = segue.destinationViewController;

那么你可以向它发送数据,所以如果它有一个数组属性,你可以......

[carDetailVC setPhoto:[thumbnails objectAtIndex:indexPath.row]];

  1. 所以最后一个问题是如何触发segue?这是最简单的一点......在您的表格视图控制器中,确保您实现该方法:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

并在该方法中告诉 segue 像这样发生:

[self performSegueWithIdentifier:@"pushToDetail" sender:self];

请注意,该标识符是您在第 2 步中在情节提要中指定的标识符。

这是在视图控制器之间发送数据的好方法。在 iOS 的 View Controller Programming Guide 中的 Apple Developer 网站上有适当的文档。

于 2013-08-20T09:28:37.613 回答
0

尝试这个

在此处下载完整的源代码

在您的详细信息视图中创建一个属性

@property (strong, nonatomic) id detailItem;

然后在你的 Tableviewcontroller 类中替换这个

 [[segue destinationViewController] setDetailItem:[tableData objectAtIndex:indexPath.row];];

代替

destViewController.car = [tableData objectAtIndex:indexPath.row];

快乐的编码..

于 2013-08-20T09:34:18.763 回答