0

UITableViewCellの画像をタップすると、新しいビューがプッシュされ、操作できるUIImageViewが表示されるようにしたい(ピンチして展開するなど)。

現在、プログラムでセルに画像を追加するカスタム セルを使用しています。

for (int i = 0; i < [self.news.imgURL count]; i++) {

        UIImageView *image = [[UIImageView alloc] init];
        [image setImageWithURL:[NSURL URLWithString:[self.news.imgURL objectAtIndex:i]]];
        [image setFrame:CGRectMake(20, (labelSize.height + 25 + 14) + (i * 280), 280, 280)];
        image.contentMode = UIViewContentModeScaleAspectFit;
        image.tag = 101 + i;
        image.userInteractionEnabled = YES;
        [self.contentView addSubview:image];


        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
        [tap setNumberOfTapsRequired:1]
        [image addGestureRecognizer: tap];
    }

これは私の customcell.m ファイルにあります。

上記のコードに見られるように、次のコードを使用して画像のタップを検出できる GestureRecognizer を使用します。

-(void) handleTap:(UITapGestureRecognizer *)recognizer {
    if (recognizer.state == UIGestureRecognizerStateEnded) {
        NSLog(@"Image tapped!", nil);
    }
}

しかし、customcell.m ファイル内から新しいビューをプッシュする方法がわかりません。customcell.m ファイル内から新しいビューをプッシュする方法はありますか、それとも masterviewcontroller から明示的に行う必要がありますか?

4

3 に答える 3

1

これは、デリゲートを使用するための良いユースケースです。カスタムセルクラスのデリゲートプロトコルを定義します。次に、テーブルビューコントローラをセルのデリゲートとして設定します。プロトコルには、画像がタップされたことをデリゲートに通知するメソッドが必要です。セルと画像は、デリゲートメソッドのパラメーターである可能性があります。

セルのhandleTap:メソッドでは、デリゲートがプロトコルメソッドに応答するかどうかを確認できます。応答する場合は、デリゲートでプロトコルを呼び出し、自身(セル)とタップされた画像を渡します。

于 2013-02-07T16:05:30.003 に答える
0

次のコードをcell tapped メソッドまたはdidSelectRowAtIndexPath

yourViewCon *vc = [[yourViewCon alloc] init];
[self presentModalViewController:vc animated:YES];
于 2013-02-07T15:14:33.410 に答える
0

まず、デリゲートを設定しますMyCustomCell.h

@protocol MyCustomCellDelegate;
@interface MyCustomCell : UITableViewCell 
@property (nonatomic, weak) id <MyCustomCellDelegate> delegate;
- (void)someCustomMethod:(NSString*)stringForChangingSomethingInMyCell;
@end

@protocol MyCustomDelegate <NSObject>
@required
- (void)itemTappedForRow:(NSUIInteger)rowNumber;
@end

ではMyCustomCell.m、デリゲートを合成します。

@synthesize delegate = _delegate;

そしてあなたのhandleTapMethod

// You can use self.tag to track rowNumbers
[_delegate itemTappedForRow:rowNumber];

一方、テーブルビューコントローラーでは、定義したばかりのプロトコルに準拠しています

@interface MyTableViewController : UITableViewController<MyCustomCellDelegate>

そして、あなたはあなたの中でこの方法でセルを作成しますcellForRowAtIndexPath:

UITableViewCell *cell = [[MyCustomCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"yoBaby"];
cell.delegate = self;
cell.tag = indexPath.row;

return cell;

最後に、 でitemTappedForRow、新しいビュー コントローラーをプッシュします。ナビゲーションコントローラーを使用していると仮定しています。

[self.navigationController pushViewController:yourNewViewControllerWithTheImageSelected animated:YES];
于 2013-02-07T16:21:06.710 に答える