- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【iOS】コントロールに名前を付けたい)
【iOS】コントロールに名前を付けたい
このQ&Aのポイント
- xcode4.5(iOS6)でiPhoneアプリを作っています。まだまだわからないことが多いですが・・・。
- storyboard上でボタンを複数設置した際、各ボタンに名称を設定して、プログラム上でその名称を取得し、処理を行いたいと思っています。すべてのボタンのアクションを1つのメソッドで受け、senderの『名称』に応じて処理を変更したいということです。いちいちswitchで処理を切り替えるのではなく、その『名称』をそのまま利用したい為、任意で『名称』を設定したいのです。
- C#などで言うと、Nameプロパティなるものがあれば済むと思うのですが、Object-IDしかなく、任意に文字を決められるプロパティが見当たりません。文字で設定したい為、Tagプロパティ以外が欲しいです。上記のようなことは出来ないのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
沢山ボタンがあって、それで、storyboardを切り替える、というのは、わからない状況ですが。 私は、使ったことありませんが、identity inspectorのuser defined attributes が使えるかもしれません。
その他の回答 (1)
- riding_heart
- ベストアンサー率64% (9/14)
回答No.1
できますよ。例は、iTune-Uで、CS193P(2011年秋)の電卓を作るプログラムの回を見ればわかる。
質問者
お礼
ありがとうございます。 CS193Pというのをキーワードに調べて、見つけました。 しかしながら、この電卓の場合、画面に表示されている数字をそのまま利用しているから 実現できているだけと思われます。 画面の表示文字としては「あいうえお」などの人間が見て分かりやすいもの、 オブジェクトの名称としては「aiueo」などのコンピュータが見て分かりやすいもの、 といった具合に、画面の表示文字は利用したくないのです。 イメージ的には、 ・Aボタンに任意の識別文字「aiueo」を設定 ・Bボタンに任意の識別文字「abcde」を設定 ・ボタンが押された際のメソッド内で、「aiueoStoryboard」や「abcdeStoryboard」という文字列を を生成してストーリーボードを取得し、そのStoryBoardに含まれるViewControllerを呼び出す ということがしたいです。
お礼
storyboardを複数使う理由は、1つのstoryboardに全機能のViewControllerを 入れると膨大になり、開発時の視認性が劣ると思われるからです。 その為、機能単位にstoryboardを設けようとしています。 結果、教えて頂いた方法で実現できました。 ありがとうございます。 また、ここまでせずとも、開発時の視認性を高める方法が他にあるようでしたら ご教示ください。 【NameValueButton.h】 #import <UIKit/UIKit.h> @interface NameValueButton : UIButton @property (nonatomic, strong, readwrite) NSString* name; @end 【NameValueButton.m】 #import "NameValueButton.h" #import <objc/runtime.h> @implementation NameValueButton static int nameKey; - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code } return self; } - (NSString*)name { return objc_getAssociatedObject(self, &nameKey); } - (void)setName:(NSString*)name { objc_setAssociatedObject(self, &nameKey, name, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } @end 【MenuViewController.m】 - (IBAction)clickAbilityButton:(id)sender { UINavigationController *navigationController = (UINavigationController *)self.navigationController; NameValueButton *button = (NameValueButton *)sender; // 対象storyboardと初期表示ビューを見つけ出す NSString *storyBoardName = [button.name stringByAppendingString:@"Storyboard"]; UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyBoardName bundle:nil]; UIViewController *initialViewController = [storyboard instantiateViewControllerWithIdentifier: button.name]; // ビューの表示 [navigationController pushViewController:initialViewController animated:YES]; }