在其他.xib中获取按钮标记

时间:2012-01-10 13:25:18

标签: xcode uibutton

我在sample.xib中有一个名为“Google”的按钮,我想使用webview在sample1.xib中加载google页面。我可能有更多按钮,如fb,youtube等。现在,我想要点击哪个按钮,然后根据它,sample1.xib显示网页。如何获取按钮的文字或ID?

3 个答案:

答案 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)

我有解决方案....在第二个视图中声明变量...并在第一个视图中使用它....并从标记的第一个视图获取标记....:)