【问题标题】:Multiple webviews in one UIViewController一个 UIViewController 中的多个 webview
【发布时间】:2014-10-06 01:24:57
【问题描述】:

假设我有一个带有两个按钮的UIViewController,两个按钮都去(推送)到另一个有两个UIWebViewsUIViewController(显示两个不同的 PDF 文件),我怎样才能确保只有我选择的那个通过按钮显示?

【问题讨论】:

  • 感谢 Andrew Sula 和 Ty_ 被发现 prepareForSegue。对于其他正在寻找这个的人,下面的本指南是最有帮助的。谢谢大家 :) nscookbook.com/2013/01/…

标签: objective-c xcode uiviewcontroller uiwebview storyboard


【解决方案1】:

您需要将一些信息传递给具有UIWebViewsUIViewController,说明按下了哪个按钮。然后,根据该信息,决定显示哪个UIWebViews

当您使用故事板时,我建议您查看prepareForSegue。它将允许您在目标视图控制器上设置一个属性,如下所示。您应该将此添加到包含按钮的UIViewController

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"buttonOne"]) {
        ExampleViewController *destViewController = segue.destinationViewController;
        destViewController.buttonClicked = @"One";
    } else if ([segue.identifier isEqualToString:@"buttonTwo"]) {
        ExampleViewController *destViewController = segue.destinationViewController;
        destViewController.buttonClicked = @"Two";
    }
}

然后您可以使用目标视图控制器中的buttonClicked 属性来决定您应该显示哪个。如果您有两个单独的UIWebViews,您可以选择使用webViewOne.hidden = YES; 隐藏一个并使用webViewTwo.hidden = NO; 显示另一个。

但是,只有一个UIWebView 可能会更简洁。然后,您可以使用prepareForSeque 传递您希望它显示的 PDF 的 URL,而不仅仅是发送单击的按钮的名称。

【讨论】:

  • 听起来不错。您编写的代码是否进入包含 UIWebViews= 的 UIViewController 的 .m 中? “prepareForSegue”如何知道按钮之间的区别?我是否必须在按钮上设置某种标签或 ID?
  • 这将进入具有按钮的UIViewController 的.m 文件中。 prepareForSegue 使用segue.identifier 来识别到segue 触发,我们想在这个例子中识别按钮。使用 Interface Builder,选择每个按钮的 push segues 并给它们一个唯一的 identifier
  • 哦,天哪,这听起来很不错,而且比我现在做的要整洁得多。我稍后会看看这个。我猜@"One" 和 @"Two" 是我需要提供的按钮的名称,作为您提到的唯一标识符?我应该把不同的 PDF 文件放在哪里?
  • 它们是转场标识符的名称。只要它们与 Interface Builder 中给出的标识符匹配,它们就可以调用任何东西(至少是任何字符串)。
【解决方案2】:

假设您 webView 位于名为 SecondViewController 的视图控制器中,而您的按钮位于名为 FirstViewController 的视图控制器中

1) 在你的SecondViewController.h中创建一个对象

@interface SecondViewController : UIViewController

@property (nonatomic, strong) NSString *whichButtonClicked;

@end

2) 在您的FirstViewController 中导入SecondViewController

#import "SecondViewController.h"

3) 在 FirstViewController.m 中的按钮 IBAction 方法中。使用此代码

 - (IBAction) firstButtonClicked
{
SecondViewController *secondViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"secondView"];
secondViewController. whichButtonClicked = @"first"
[self.navigationController pushViewController:secondViewController animated:YES];
}

 - (IBAction) secondButtonClicked
{
SecondViewController *secondViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"secondView"];
secondViewController. whichButtonClicked = @"second"
[self.navigationController pushViewController:secondViewController animated:YES];
}

PS 别忘了。在你Storyboard。将 SecondViewController 的 Storyboard ID 设置为 secondView

4) 在您的SecondViewController.m 中使用此代码检查哪个按钮

if ([self.whichButtonClicked isEqualToString:@"first"])
{
///display first web view here
}
else
{
//display second web view here
}

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多