繁体   English   中英

如何在iOS中按索引将图像数组从OneViewController发送到AnotherViewController?

[英]How to Send Image Array by index From OneViewController to AnotherViewController in iOS?

我是iOS开发的新手。 我制作了一个包含JSON数据的应用程序,并将该数据解析为Array,并且此Array也包含另一个数组,它也通过索引进行解析,如下所示

if (responsedata.length > 0)
{
    NSError* error;

    self.json = [NSJSONSerialization JSONObjectWithData:responsedata options:kNilOptions error:&error];
    if ([[_json objectForKey:@"data"] isKindOfClass:[NSArray class]])
    {
        NSArray *arr = (NSArray *)[_json objectForKey:@"data"];
        [self.imageArray addObjectsFromArray:arr];
        [self.storeViewTable reloadData];
    }
    self.storeViewTable.hidden=FALSE;
    }
    for(NSDictionary *dict in self.imageArray )
    {
    [self.imagesa addObject:@{@"demopage":[dict valueForKey:@"demopage"]}];
    }
    NSLog(@"Array Count %@",self.imagesa);
    NSLog(@"Another array Count %d",[self.imageArray count]);
}

它是给我一个我想要的数组,现在当我按下TableviewCell按钮时,按索引逐个显示此self.imagesa数组,然后添加一个标签TableViewCell按钮,而Write是如下方法

preview.tag=indexPath.row;

我将标签设置为“预览按钮”,并且为Action方法,例如

-(IBAction)showPreviewSeondSection:(id)sender
{
UIButton *button = (UIButton *)sender;
NSInteger row = button.tag;
NSLog(@"Tag of button %d",row);
if (row == 0)
{
    PreviewViewController *preview=[[PreviewViewController alloc]initWithNibName:@"PreviewViewController" bundle:nil];
    preview.imagesa=self.imagesa[1][@"demopage"];
    [self presentViewController:preview animated:YES completion:nil];
    NSLog(@"Preview array %@",preview.imagesa);
}
if (row == 1)
{
    PreviewViewController *preview=[[PreviewViewController alloc]initWithNibName:@"PreviewViewController" bundle:nil];
    preview.imagesa=self.imagesa[2][@"demopage"];
    [self presentViewController:preview animated:YES completion:nil];
    NSLog(@"Preview array %@",preview.imagesa);
}
}

这是showPreviewSeondSection是我按下预览按钮的操作方法在这里,我只有两个单元格,然后工作得很好,然后将self.imagesa数组发送到PreviewViewController视图控制器,但是在以后的应用程序中,我的TableViewCell增加了,那么我如何设置For循环或if循环要将数据发送到我的PreviewView Controller,请为此提供解决方案。 当我将代码编辑为myButton按下事件时

-(IBAction)showPreviewSeondSection:(id)sender
{
UIButton *button = (UIButton *)sender;
NSInteger row = button.tag;
NSLog(@"Tag of button %d",row);

for (row = 1; row<[self.imagesa count]; row++)
{
    PreviewViewController *preview=[[PreviewViewController alloc]initWithNibName:@"PreviewViewController" bundle:nil];
    preview.imagesa=self.imagesa[row][@"demopage"];
    [self presentViewController:preview animated:YES completion:nil];
    NSLog(@"Preview array %@",preview.imagesa);
}
}

那么它仅显示“所有索引的第一索引数据”按钮。

正如我在您的代码中注意到的那样...当row = 0时,您正在索引1处发送数组;当row = 1时,您正在索引2处发送数组,因此可以像这样动态地进行操作,

您不需要传递硬编码索引,您需要传递row + 1索引

-(IBAction)showPreviewSeondSection:(id)sender
{
UIButton *button = (UIButton *)sender;
NSInteger row = button.tag;
NSLog(@"Tag of button %d",row);

PreviewViewController *preview=[[PreviewViewController alloc]initWithNibName:@"PreviewViewController" bundle:nil];
preview.imagesa=self.imagesa[row+1][@"demopage"];
[self presentViewController:preview animated:YES completion:nil];

}

您无需编写if条件,在单元格按钮动作时我们将获得索引。

您可以使用以下代码发送相同的数据,如果要发送下一个对象,则可以将行增加1。

NSInteger row = (button.tag+1);

如果“行”数大于“ self.imagesa”数组中的对象数,则应用程序将崩溃,并抛出“ NSArray Outofbounds ...”异常。

-(IBAction)showPreviewSeondSection:(id)sender
{
UIButton *button = (UIButton *)sender;
NSInteger row = button.tag;
NSLog(@"Tag of button %d",row);

// remove the commented part only

// if (row == 0)
// {
    PreviewViewController *preview=[[PreviewViewController alloc]initWithNibName:@"PreviewViewController" bundle:nil];
    preview.imagesa=self.imagesa[row][@"demopage"];
    [self presentViewController:preview animated:YES completion:nil];
    NSLog(@"Preview array %@",preview.imagesa);
//}
//if (row == 1)
//{
//    PreviewViewController *preview=[[PreviewViewController alloc]initWithNibName:@"PreviewViewController" bundle:nil];
 //   preview.imagesa=self.imagesa[2][@"demopage"];
 //   [self presentViewController:preview animated:YES completion:nil];
 //   NSLog(@"Preview array %@",preview.imagesa);
//}
}

暂无
暂无

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

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