我在sample.xib中有一个名为“Google”的按钮,我想使用webview在sample1.xib中加载google页面。我可能有更多按钮,如fb,youtube等。现在,我想要点击哪个按钮,然后根据它,sample1.xib显示网页。如何获取按钮的文字或ID?
答案 0 :(得分:3)
使用标签有点笨重。你还有另外一件事要跟踪。有两种方法可以做到这一点。
第一种方式
为每个按钮使用不同的操作方法。这可能看起来像很多重复的代码,但我相信编写人类更容易阅读的代码,并让编译器负责优化(至少直到我的配置文件)它使得更容易看到确切的内容每个方法都有,openGoogleInWebview
之类的操作名称比buttonAction
所以有了这个 - 将每个按钮动作(在Interface Builder中很容易)连接到每个动作:
- (IBAction)openGoogleInWebview;
- (IBAction)openYouTubeInWebview;
等
请参阅 - 如果要优化此功能,您可以编写一个方法,该方法接收URL并在Webview中将其打开并将URL发送到:例如
- (IBAction)openGoogleInWebview {
NSURL *url = // Your URL here;
[self openWebviewWithURL:url];
}
...
- (void)openWebviewWithURL:(NSURL *)url {
// load your webview with the url
}
保持分区,易读和易于维护。
第二种方式
如果你真的想要使用依赖于按下按钮的单一方法,则没有理由使用按钮的标签。这是不可维护的。您已经拥有每个按钮的唯一标识符;它是指针地址。
如果在视图控制器中为按钮创建IBOutlets,您只需检查指针:
·H
@property (weak, nonatomic) IBOutlet UIButton *googleButton;
@property (weak, nonatomic) IBOutlet UIButton *youTubeButton;
的.m
- (IBAction)buttonClicked:(id)sender {
if (sender == googleButton) {
// load Google
} else if (sender == youTubeButton) {
// load YouTube
} // etc
...
}
再次 - 更易于维护;你不必跟踪按钮的标签。并且代码更具可读性,因为您可以看到谷歌按钮加载谷歌页面,这比说明tag1打开谷歌页面更清晰,标签1应该是谷歌按钮的标签。
答案 1 :(得分:1)
为您的按钮设置tag
并将其视为ID(注意:只有数字有效)。
[fbButton setTag:1];
[fbButton addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
//...
[youtubeButton setTag:2];
[youtubeButton addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
//...
和您的按钮操作:
- (void)buttonAction:(id)sender
{
switch (((UIButton *)sender).tag) {
case 1:
// load facebook view
break;
case 2:
// load youtube view
break;
default:
break;
}
}
答案 2 :(得分:0)
我有解决方案....在第二个视图中声明变量...并在第一个视图中使用它....并从标记的第一个视图获取标记....:)