繁体   English   中英

使用TableView将UIImageView加载到另一个ViewController

[英]Load UIImageView with TableView to another ViewController

我希望你能帮帮我!

现在我有一个来自此源的表格视图按组的2014年世界杯国家的iOS表格视图

在这里,您可以从sidebarviewcontroller中查看代码:

- (void)viewDidLoad

[super viewDidLoad];

self.view.backgroundColor = [UIColor colorWithWhite:0.2f alpha:1.0f];
self.tableView.backgroundColor = [UIColor colorWithWhite:0.9f alpha:1.0f];
self.tableView.separatorColor = [UIColor colorWithWhite:0.15f alpha:0.2f];

grpArr = [[NSArray alloc]initWithObjects:@"Group A",@"Group B",@"Group C",@"Group D",@"Group E",@"Group F",@"Group G",@"Group H", nil];

NSArray* aArr = [[NSArray alloc]initWithObjects:@"BRAZIL",@"CROATIA",@"MEXICO",@"CAMEROON", nil];
NSArray* bArr = [[NSArray alloc]initWithObjects:@"SPAIN",@"NETHERLAND",@"CHILE",@"AUSTRALIA", nil];
NSArray* cArr = [[NSArray alloc]initWithObjects:@"COLOMBIA",@"GREECE",@"CÔTE D'IVOIRE",@"JAPAN", nil];
NSArray* dArr = [[NSArray alloc]initWithObjects:@"URUGUAY",@"COSTA RICA",@"ENGLAND",@"ITALY", nil];
NSArray* eArr = [[NSArray alloc]initWithObjects:@"SWITZERLAND",@"ECUADOR",@"FRANCE",@"HONDURAS", nil];
NSArray* fArr = [[NSArray alloc]initWithObjects:@"ARGENTINA",@"BOSNIA AND HERZEGOVINA",@"IRAN",@"NIGERIA", nil];
NSArray* gArr = [[NSArray alloc]initWithObjects:@"GERMANY",@"PORTUGAL",@"GHANA",@"USA", nil];
NSArray* hArr = [[NSArray alloc]initWithObjects:@"BELGIUM",@"ALGERIA",@"RUSSIA",@"KOREA REPUBLIC", nil];

tableArr = [NSArray arrayWithObjects:aArr,bArr,cArr,dArr,eArr,fArr,gArr,hArr, nil];

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

return [grpArr count];

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section


return  [grpArr objectAtIndex:section];

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

return  [[tableArr objectAtIndex:section] count];

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

return 44;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath


UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"normalCell"];

NSString *tempCountry = [[tableArr objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]];
UIImageView *imageView = (UIImageView *)[[cell contentView] viewWithTag:1];
imageView.image=[UIImage imageNamed:tempCountry];
UILabel *countryLabel = (UILabel*)[[cell contentView] viewWithTag:2];
countryLabel.text = tempCountry;


return cell;

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

{

// Set the photo if it navigates to the PhotoView
if ([segue.identifier isEqualToString:@"showPhoto"]) {
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    PhotoViewController *photoController = (PhotoViewController*)segue.destinationViewController;
    NSString *photoFilename = [NSString stringWithFormat:@"%@_photo.png", [tableArr objectAtIndex:indexPath.row]];
    photoController.photoFilename = photoFilename;
}

if ( [segue isKindOfClass: [SWRevealViewControllerSegue class]] ) {
    SWRevealViewControllerSegue *swSegue = (SWRevealViewControllerSegue*) segue;

    swSegue.performBlock = ^(SWRevealViewControllerSegue* rvc_segue, UIViewController* svc, UIViewController* dvc) {

        UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
        [navController setViewControllers: @[dvc] animated: NO ];
        [self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];
    };

}

}

在我的PhotoViewController中,我使用以下代码行将图像加载到viewDidLoad方法中

 self.photoImageView.image = [UIImage imageNamed:self.photoFilename];

问题是我无法在photoviewcontroller中加载图像,图像未显示。 我想展示一个带有巴西国旗的球。 我的图片名为BRAZIL_photo.png。 我认为我与nsarray对象没有任何关系! 问题出在哪里?

谢谢!

您需要使用[[tableArr objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]]来从数组中获取国家/地区的名称,因为该数组是一个数组数组。

NSString *photoFilename = [NSString stringWithFormat:@"%@_photo.png", tableArr[indexPath.section][indexPath.row]];

您在prepareForSegue:中传递了一个字符串prepareForSegue:这不是照片名称。 因此,不会填充图像视图。

当您在单元格中获取图像时,它可能仍然有效:

NSString *tempCountry = tableArr[indexPath.section][indexPath.row];
imageView.image=[UIImage imageNamed:tempCountry];

图像名称大概是@"BRAZIL" ,它对@"BRAZIL.png"也有效。

但是,在准备序列时,您仅传递了组数组:

NSString *photoFilename = [NSString stringWithFormat:@"%@_photo.png", 
                           tableArr[indexPath.row]];
photoController.photoFilename = photoFilename;

图像名称现在类似于@"<CFArray 0x45003F>.png" 因此,您应该传递正确的字符串:

    NSString *photoFilename = [NSString stringWithFormat:@"%@_photo.png", 
                           tableArr[indexPath.section][indexPath.row]];

现在,图像名称应为@"BRAZIL_photo.png" 检查您的文件名(包括大写),您应该找到错误。

您的问题来自荒谬的数据设置。 一种正确的方法是拥有一个包含字符串的plist。 如果创建具有适当属性的NSObject子类(如GroupTeam等),则将获得更具可读性的代码。 如果您打算保留比分和比赛时间等,则实际上应该从一开始就考虑使用Core Data。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM