我是iOS开发中的新手。我创建一个包含JSON数据的应用程序我将该数据解析为数组,此数组也包含另一个数组,它也被索引解析为
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]);
}
它是给我数组我想要的,现在我通过索引按索引显示这个self.imagesa数组当我的TableviewCell按钮被按下然后我添加标签TableViewCell按钮和写方法就像
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是我的预览按钮按下Actionmethod这里我只有两个Cell然后它工作得非常好并将我的self.imagesa数组发送到PreviewViewController视图控制器但在我的应用程序中的未来我的TableViewCell增加了然后我如何设置For循环或者如果循环发送数据到我的PreviewView控制器请给我解决方案。 当我编辑我的代码作为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);
}
}
然后它只显示所有按钮的第一个索引数据。
答案 0 :(得分:0)
正如我在你的代码中注意到的那样...... 当row = 0时,您将在索引1处发送数组 当row = 1时,您将在索引2处发送数组 所以这可以像这样动态完成,
您不需要传递硬编码索引,您需要传递行+ 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];
}
答案 1 :(得分:0)
你不需要写条件,在单元格按钮操作时我们将得到索引。
您可以使用下面的代码发送相同的数据,如果您想发送下一个对象,那么您可以将行增加1。
NSInteger row = (button.tag+1);
如果'row'数字大于'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);
//}
}