解決済み

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

  • すぐに回答を!
  • 質問No.7824777
  • 閲覧数152
  • ありがとう数9
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 66% (482/721)

xcode4.5(iOS6)でiPhoneアプリを作っています。
まだまだわからないことが多いですが・・・。

storyboard上でボタンを複数設置した際、
各ボタンに名称を設定して、プログラム上で
その名称を取得し、処理を行いたいと思っています。

すべてのボタンのアクションを1つのメソッドで受け、
senderの『名称』に応じて処理を変更したいということです。
いちいちswitchで処理を切り替えるのではなく、その『名称』を
そのまま利用したい為、任意で『名称』を設定したいのです。

C#などで言うと、Nameプロパティなるものがあれば
済むと思うのですが、Object-IDしかなく、任意に文字を
決められるプロパティが見当たりません。
文字で設定したい為、Tagプロパティ以外が欲しいです。

上記のようなことは出来ないのでしょうか?

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

  • 回答No.2

ベストアンサー率 64% (9/14)

沢山ボタンがあって、それで、storyboardを切り替える、というのは、わからない状況ですが。

私は、使ったことありませんが、identity inspectorのuser defined attributes が使えるかもしれません。
お礼コメント
naktak

お礼率 66% (482/721)

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];
}
投稿日時 - 2012-12-05 00:44:49

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 64% (9/14)

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

お礼率 66% (482/721)

ありがとうございます。
CS193Pというのをキーワードに調べて、見つけました。

しかしながら、この電卓の場合、画面に表示されている数字をそのまま利用しているから
実現できているだけと思われます。

画面の表示文字としては「あいうえお」などの人間が見て分かりやすいもの、
オブジェクトの名称としては「aiueo」などのコンピュータが見て分かりやすいもの、
といった具合に、画面の表示文字は利用したくないのです。


イメージ的には、
 ・Aボタンに任意の識別文字「aiueo」を設定
 ・Bボタンに任意の識別文字「abcde」を設定
 ・ボタンが押された際のメソッド内で、「aiueoStoryboard」や「abcdeStoryboard」という文字列を
  を生成してストーリーボードを取得し、そのStoryBoardに含まれるViewControllerを呼び出す

ということがしたいです。
投稿日時 - 2012-12-02 12:20:55
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ