1

Appleのリマインダーアプリに似たアプリに取り組んでいます。データを含むtableViewがあります。セルには UIImageView と Disclosure Indicator アクセサリ ビューがあります。その行のいずれかが選択されると、View Controller がプッシュされます。

各行の UIImageView が、Apple リマインダー アプリのように、行の選択とは別に機能するようにしたいと考えています。どうやってやるの?

セルのサブビューとして UIimageview を試し、それに UITapGestureRecognizer を追加しました。最後に挿入された行では正常に機能しましたが、他の行では機能しませんでした。

4

2 に答える 2

1

UIImageView をサブクラス化するのではなく、UITableViewCell をサブクラス化することを検討してください。サブクラスでは、引き続き UITapGestureRecognizer を UIImageView に追加できますが、セルのサブクラスのメソッドをターゲットにします (テーブル コントローラーではなく、ハンドラーが現在ターゲットとしているものは言いませんでした)。

カスタム セルの UIImageView に tapRecognizer を追加し、カスタム セルにも BOOL フラグを設定します (例: imageViewTapped)。タップ ハンドラーで、imageViewTapped を YES に設定します。

これで、タップが imageView にあったかどうかに関係なく、tableView コントローラーは didSelectRowWithIndexPath の呼び出しを取得します。したがって、didSelectRowAtIndexPath で、カスタム セルの imageViewTapped プロパティを評価します。フラグが設定されている場合は、viewController A (imageView 動作用) をナビゲーション スタックにプッシュします。imageViewTapped == NO の場合、viewController B をプッシュします (おそらく、既に移行しているもの)。

于 2013-02-06T01:00:53.863 に答える
1

@アデル。imageView に透明なボタンを配置して、ユーザーのタッチに応答できます。

CGRect imageRect = (CGRect){100, 100, 100, 100};
UIImageView *imageView = [[[UIImageView alloc] initWithFrame:imageRect] autorelease];
imageView.backgroundColor = [UIColor yellowColor];
[self.view addSubview:imageView];
imageView.userInteractionEnabled = YES;

UIButton *maskBtn = [UIButton buttonWithType:UIButtonTypeCustom];
maskBtn.frame = imageView.bounds;
maskBtn.backgroundColor = [UIColor clearColor];
[maskBtn addTarget:self action:@selector(maskBtnDidClick:) forControlEvents:UIControlEventTouchUpInside];
[imageView addSubview:maskBtn];

デフォルトでは、imageView の userInteractionEnabled は NO であることに注意してください。希望が役立ちます。:)

于 2013-02-06T02:09:10.987 に答える