コントロールを2回アクティブにしたくない場合は、おそらくコントロールを無効にする必要があるという他の回答に同意します。ただし、すべてのコントロールで使用できる一般的なパターンに関する実際の質問に対する回答が必要な場合は、関連するオブジェクトを使用できます...
- (IBAction)buttonAction:(UIButton*)sender
{
NSString* webViewKey = @"AssociatedWebView";
// See if there is web view already
id webView = objc_getAssociatedObject(sender, webViewKey);
if(webView == nil)
{
// There is no existing web view, create it
webView = [self theWebView];
// Associate it with the button
objc_setAssociatedObject(sender, webViewKey, webView, OBJC_ASSOCIATION_RETAIN);
// Add the web view
[self.view addSubview:webView];
}
}
上記は、オブジェクトをインスタンスに関連付ける一般的な方法を示しているUIButtonため、既に関連付けられているかどうかを確認し、既存のものを再利用できます。質問で完全に説明されていない他の方法でこれを使用する場合に備えて、この回答を提供しますが、実際には、コントローラーのプロパティがまだない場合はwebView、遅延ロードするためにコントローラーのプロパティを使用できますwebView読み込まれました。
質問で議論しているシングルトン スタイルを本当にシミュレートしたい場合(既に存在する場合UIButtonは同じオブジェクトをすべて共有する多くのインスタンスを持つことができるようにするため) 、特定のオブジェクトの代わりにオブジェクトまたはオブジェクトに関連付けることができます。実例。これを行うには、上記のコードのをに置き換えます。webViewwebView[UIButton class][UIControl class]sender[UIControl class]