UITableViewController
には、自分のサブクラスでカスタマイズしたカスタムセルがあります。 このサブクラスでは、ボタンを追加しました。ナビゲーションコントローラのスタックにビューをプッシュしたいと思います。カスタムセルからナビゲーションコントローラにどのようにアクセスできるかわからないので、これを行う方法はわかりません。UITableViewCellからビューをプッシュする方法
答えて
ここに情報が必要です。どのクラスがテーブルを保持していますか、どのクラスはテーブルビューのデリゲートですか?
最も単純なケースでは、1つのクラスで作業しています。それは[self.navigationController pushViewController: xyz]
よりでしょう。
しかし、独自のサブクラス化されたUITableViewCellsを持っている場合は、セルクラスとビューコントローラの間で通信する必要があります。これを行うには、セルクラスのプロパティまたは独自のcustomCellデリゲートを設定します。
また、あなたのviewControllerがリスニングしている通知([[NSNotificationCenter defaultCenter] addListener: self target: @selector(...) name: @"cellButtonTouchedNotification"]
)の通知([[NSNotificationCenter defaultCenter] postNotification: @"cellButtonTouchedNotification"]
)を送信することもできます。この場合、userInfoプロパティを使用して、どのセルがタッチされたかを覚えておくことができます。
もう1つは、ボタンを外部からアクセスできるようにすることです(プロパティなど)。次に、tableViewDelegateのメソッドcellForRowAtIndexPath:
にターゲットを追加することができます。 Smth。 like [myCustomCell.button addTarget: self selector: @selector(...)];
タグを使用して行myCustomCell.button.tag = indexPath.row
を識別できます。
セル内のUITableViewControllerへのポインタを保持します。セルのコンストラクタで渡すことも、後で設定することもできます。次に、テーブルビューコントローラでpushViewControllerを呼び出すことができます。
さらに美しい解決策は、セルの代理人を定義することです。たとえば、buttonClickedコールバックを持つButtonCellDelegateと言うことができます。デリゲートは、UITableViewController(またはView Controllerにアクセスできる他の場所)に実装します。上記のようにデリゲートをセルに渡し、ボタンがクリックされたときにセルからコールバック関数を呼び出します。
委任を使用します。ここでは簡単な例です。あなたは(ナビゲーションコントローラに挿入され、例えば、テーブルビューコントローラ)あなたのセルのためのデリゲートにメッセージを送信]ボタンをクリックし
//.h
@protocol MyTableViewCellDelegate;
@interface MyTableViewCell : UITableViewCell
@property (assign, nonatomic) id <MyTableViewCellDelegate> delegate;
//your code here
@end
@protocol MyTableViewCellDelegate <NSObject>
@optional
- (void)delegateForCell:(MyTableViewCell *)cell;
@end
//.m
@implementation MyTableViewCell
@synthesize delegate = _delegate;
- (void)prepareForReuse {
[super prepareForReuse];
self.delegate = nil;
}
- (void)buttonAction {
if ([self.delegate respondsToSelector:@selector(delegateForCell:)])
[self.delegate delegateForCell:self];
}
@end
。ここで
コントローラ
@implementation YourController
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *reuseIdentifier = @"MyCustomCell";
MyTableViewCell *cell = (id)[tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
if (cell == nil)
cell = [[[MyTableViewCell alloc] initWithMyArgument:someArgument reuseIdentifier:reuseIdentifier] autorelease];
[cell setDelegate:self];
// update your cell
return cell;
}
- (void)delegateForCell:(MyTableViewCell *)cell {
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
// do your stuff
[self.navigationController pushViewController:...];
}
@end
- 1. ToolBar、BarButtonItemからビューをプッシュする方法
- 2. UITableViewCellのUICollectionViewからTableViewControllerをプッシュ
- 3. ビューiphoneをプッシュする方法は?
- 4. UITableViewCellの@IBAction関数でViewControllerをプッシュする方法
- 5. UIViewからUIViewControllerをプッシュする方法
- 6. UITableViewCell URLへのプッシュ
- 7. UICollectionViewCellからナビゲーションコントローラにプッシュする方法
- 8. テーブルビューのセルからビューをプッシュ
- 9. カルーセルからビューをドラッグする方法
- 10. ストーリーボードなしで新しいビューをプッシュする方法
- 11. SDWebImageイメージを詳細ビューにプッシュする方法
- 12. ビューでプッシュされたナビゲーションバーのサブビューを作成する方法
- 13. モバイルトグルメニュー - ビューポートのビューの外にコンテンツをプッシュする方法は?
- 14. UITableViewCell - Nibsから動的サイズのコンテンツビューを処理する方法
- 15. サブビューの1つからUITableViewCellを取得する方法
- 16. 単一のxibからuitableviewcellをロードする方法
- 17. uitableviewcell(uiftable/xcode)でuiviewからセルインデックスを取得する方法
- 18. カスタムテーブルビューセルからのビューのプッシュXcode 4
- 19. テーブルビューから詳細ビューにプッシュ
- 20. UITableViewCellカスタム編集ビュー
- 21. .jsonファイルから解析されたオブジェクトを持つUITableViewCellからmapKitビューをプッシュするにはどうすればよいですか?
- 22. ビューからリダイレクトする方法Djangoで
- 23. ビューからタブバーオブジェクトにアクセスする方法
- 24. iOS Swift:カスタムTableviewセル内からビューをスタックにプッシュする
- 25. 部分ビューから親ビューを取得する方法
- 26. Swift 4でUITableViewCellからUICollectionViewControllerにプログラム的にナビゲートする方法
- 27. ビューからタグ値を知る方法
- 28. UITableViewCellのSegueからindexPathデータを含める方法は?
- 29. あるビューから別のビューにリダイレクトする方法は?
- 30. 別の方法からビューを削除する方法
は別のアイデアを編集します。 – calimarkus
私はUIViewControllerを持っています。これにはテーブルビューが含まれています。 tableviewデリゲートはselfに設定されているので、それを持つUIViewControllerです。 私は自分のサブクラス化されたUITableViewCellsを持っています。実際、私の問題はUIViewControllerとUITableViewCellsの間で通信することです。私はあなたの2つのソリューションが私が探していたものだと信じています。私はそれらを試して、あなたに知らせるつもりです。ありがとう – ChrisTauziet
それは、ありがとうでした。私はあなたの最後のアイデアを使用し、それは完璧に正常に働いた。 – ChrisTauziet