我同意其他答案,如果您不希望它被激活两次,您可能应该禁用该控件。但是,如果您确实想要回答有关可以在所有控件上使用的通用模式的实际问题,那么您可以使用关联对象...
- (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
实例,如果它已经存在,它们都共享同一个webView
对象),那么您可以将 关联webView
到[UIButton class]
对象甚至[UIControl class]
对象而不是您的特定实例。您可以通过替换上面代码中的sender
with来做到这一点。[UIControl class]