• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【iOS】コントロールに名前を付けたい)

【iOS】コントロールに名前を付けたい

このQ&Aのポイント
  • xcode4.5(iOS6)でiPhoneアプリを作っています。まだまだわからないことが多いですが・・・。
  • storyboard上でボタンを複数設置した際、各ボタンに名称を設定して、プログラム上でその名称を取得し、処理を行いたいと思っています。すべてのボタンのアクションを1つのメソッドで受け、senderの『名称』に応じて処理を変更したいということです。いちいちswitchで処理を切り替えるのではなく、その『名称』をそのまま利用したい為、任意で『名称』を設定したいのです。
  • C#などで言うと、Nameプロパティなるものがあれば済むと思うのですが、Object-IDしかなく、任意に文字を決められるプロパティが見当たりません。文字で設定したい為、Tagプロパティ以外が欲しいです。上記のようなことは出来ないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

沢山ボタンがあって、それで、storyboardを切り替える、というのは、わからない状況ですが。 私は、使ったことありませんが、identity inspectorのuser defined attributes が使えるかもしれません。

naktak
質問者

お礼

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]; }

その他の回答 (1)

回答No.1

できますよ。例は、iTune-Uで、CS193P(2011年秋)の電卓を作るプログラムの回を見ればわかる。

naktak
質問者

お礼

ありがとうございます。 CS193Pというのをキーワードに調べて、見つけました。 しかしながら、この電卓の場合、画面に表示されている数字をそのまま利用しているから 実現できているだけと思われます。 画面の表示文字としては「あいうえお」などの人間が見て分かりやすいもの、 オブジェクトの名称としては「aiueo」などのコンピュータが見て分かりやすいもの、 といった具合に、画面の表示文字は利用したくないのです。 イメージ的には、  ・Aボタンに任意の識別文字「aiueo」を設定  ・Bボタンに任意の識別文字「abcde」を設定  ・ボタンが押された際のメソッド内で、「aiueoStoryboard」や「abcdeStoryboard」という文字列を   を生成してストーリーボードを取得し、そのStoryBoardに含まれるViewControllerを呼び出す ということがしたいです。

関連するQ&A