2

で画像を表示したいTableView。1 つのセルに 1 つの画像を表示できますが、フォト ライブラリのようにすべての行に 1 つの画像ではなく 4 つの画像を表示したいのですが、任意の画像を選択すると、フォト ライブラリで起こったようにスライド ショーとして開きます。

私の画像は Document Directory に保存されています。これどうやってするの?

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tablView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil)
    {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    //Adjust your imageview frame according to you
    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0.0, 0.0, 470.0, 80.0)];

    [imageView setImage:[arrayOfImages objectAtIndex:indexPath.row]];
    [cell.contentView addSubview:imageView];
    return cell;
}
4

5 に答える 5

5

今はiPhoneライブラリのような画像を表示する方法を説明しているだけです. UITableViewの代わりにUIScrollViewを使用します。これで良くなると思います!

配列内のすべての画像を取得したら、次のコードを試してください。

-(void)loadImagesOnScrollView
{
    myScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0.0, 0.0, 320.0, 416.0)];
    myScrollView.delegate = self;
    myScrollView.contentSize = CGSizeMake(320.0, 416.0);
    myScrollView.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:myScrollView];

    float horizontal = 8.0;
    float vertical = 8.0;

    for(int i=0; i<[imageArray count]; i++)
    {
        if((i%4) == 0 && i!=0)
        {
            horizontal = 8.0;
            vertical = vertical + 70.0 + 8.0;
        }

        buttonImage = [UIButton buttonWithType:UIButtonTypeCustom];
        [buttonImage setFrame:CGRectMake(horizontal, vertical, 70.0, 70.0)];
        [buttonImage setTag:i];
        [buttonImage setImage:[imageArray objectAtIndex:i] forState:UIControlStateNormal];
        [buttonImage addTarget:self action:@selector(buttonImagePressed:) forControlEvents:UIControlEventTouchUpInside];
        [myScrollView addSubview:buttonImage];

        horizontal = horizontal + 70.0 + 8.0;
    }

    [myScrollView setContentSize:CGSizeMake(320.0, vertical + 78.0)];
}

そして、このように各画像を処理できます

-(void)buttonImagePressed:(id)sender
{
    NSLog(@"you have pressed : %d button",[sender tag]);
}

(注: まず第一に、これはあなたとあなたの論理次第ですので、あなたの論理を強くしてください。誰もここにすべてを書くことはできません. あなたが初心者なら、いつか「オールザベスト」のために勉強してください)

于 2012-07-03T09:16:08.993 に答える
0

行ごとに4つの画像を含むテーブルビューを実装し、行に従って各画像にタグを付けます。各画像にタップレコグナイザーを追加し、画像タグに基づいて必要なコードを実行します。以下はコードです、

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *cellidentifier=@"cell";
   UITableViewCell *cell=(UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellidentifier];

   if(cell==nil)
   {
       cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellidentifier];
   }
   int x=0;

    //configure the cell 
    for(int i=0;i<4;i++)
    {
       UIImage *image=[UIImage imageNamed:@"hh.jpg"];
       UIImageView *im=[[UIImageView alloc]initWithImage:image];
       im.frame=CGRectMake(0+x, 0, 60, 60);
       x=x+61;

       im.tag=(indexPath.row*10)+i;
       im.userInteractionEnabled = YES;
       UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
       [im addGestureRecognizer:tapGesture];
       [cell addSubview:im];
    }

   //cell.backgroundView=img;
   [[cell textLabel] setBackgroundColor:[UIColor clearColor]];
   [[cell detailTextLabel] setBackgroundColor:[UIColor clearColor]];

return cell;
}

- (void) tapAction:(UIGestureRecognizer *)recognizer
{
     NSLog(@"Clicked Button With Tag =%i",recognizer.view.tag);
}
于 2012-07-03T09:35:04.433 に答える
0

最初にデータを設定する必要があります。たぶん、配列の配列が良いアプローチになるでしょう。

-(void)prepareData
{
    NSMutableArray *finalArray = [[NSMutableArray alloc]init];

    int dataPerCell = 4;
    int remainingData = [allImagesData count] % dataPerCell;
    int pagesForData = [allImagesData count] / dataPerCell;

    NSMutableArray *arrayToAdd = [[NSMutableArray alloc]init];
    for (int j = 0; j<[allImagesData count]; j++)
    {
        [arrayToAdd addObject:[allImagesData objectAtIndex:j]];

        //Check if dividing the array is needed
        if ([allImagesData count] > dataPerCell)
        {
            if ([arrayToAdd count] == dataPerCell)
            {
                NSMutableArray *finalArray = [[NSMutableArray alloc]initWithArray:arrayToAdd];
                [arrayToAdd removeAllObjects];
                [finalArray addObject:finalArray];
            }
            else if([arrayToAdd count] == remainingData && [finalArray count] == pagesForData)
            {
                NSMutableArray *finalArray = [[NSMutableArray alloc]initWithArray:arrayToAdd];
                [arrayToAdd removeAllObjects];
                [finalArray addObject:finalArray];
            }
        }
        else if([allImagesData count] <= dataPerCell)
        {
            NSMutableArray *finalArray = [[NSMutableArray alloc]initWithArray:arrayToAdd];
            if ([finalArray count] == [allImagesData count])
            {
                [finalArray addObject:finalArray];
            }
        }
    }
}

上記のコードは、別の配列の配列 (finalArray) を提供します。各配列には 4 つのデータがあります。

のクラス サブクラスを作成し、UITableViewCellfour のようにそれにプロパティを追加して、UIImageViewsそれらを場所に配置できます。あなたの場合、それらを水平に配置すると仮定します。

 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
      return [finalArray count];
 }

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(!cell)
    {
        cell = [[[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]autorelease];
    }

    //This will throw an exception if [allImagesData count] < 4 OR your [allImagesData count]  % 4 != 0
    [cell.imageVw1 setImage:[UIImage imageNamed:[[finalArray objectAtIndex:indexPath.row ] objectAtIndex:0]]];
    [cell.imageVw2 setImage:[UIImage imageNamed:[[finalArray objectAtIndex:indexPath.row ] objectAtIndex:1]]];
    [cell.imageVw3 setImage:[UIImage imageNamed:[[finalArray objectAtIndex:indexPath.row ] objectAtIndex:2]]];
    [cell.imageVw4 setImage:[UIImage imageNamed:[[finalArray objectAtIndex:indexPath.row ] objectAtIndex:3]]];

    return cell;
}

注:コードはテストされていません。

于 2012-07-03T09:36:33.090 に答える
0

新しい UIView を作成してレイアウトし、それに画像を追加する必要があります。次に、現在追加している (1 つの画像のみを保持する)contentViewの代わりに、そのビューをセルの に追加できます。UIImageView

于 2012-07-03T08:56:28.883 に答える
-1

カスタム セル サブクラスを作成する必要があります - チュートリアルCustom UITableViewCells with Interface Builder を参照してください。また、 Cocoa Touchフレームワークについてさらに調査と研究を行うことをお勧めします。幸運を。

于 2012-07-03T08:55:06.417 に答える