gpt4 book ai didi

ios - 使用不带 UITabBarController 的 UITabBar 来控制 UIWebView

转载 作者:可可西里 更新时间:2023-11-01 03:23:10 25 4
gpt4 key购买 nike

我想使用 UITabBar 让用户导航单个 UIWebView。这是可能的还是我最好使用 UIToolbar?如果最好使用 UIToolbar,我将如何模拟按钮的“选定”视觉状态,就像 UITabBar 本身那样?

最佳答案

没有UITabBarController的UITabBar来控制UIWebView

我已经提供了 Objective-C 和 Swift 版本来解决这个问题。您真正需要做的唯一一件事是在类上实现 UITabBarDelegate 协议(protocol)。它不一定是 ViewController,但在这个简单的例子中它是)。

Xcode 5 中的 Objective-C 解决方案

在这个 Objective-C 示例中,您可以通过 UITabBar 在三个搜索引擎之间切换。

首先您必须设置您的 View ,如下所示:(除非先将 UITabBarDelegate 添加到 ViewController,否则无法设置委托(delegate)导出,请参见代码)

enter image description here

现在因为您没有直接引用 UITabBar 内的项目,因为我们在 Interface Builder 中设置了所有项目,您需要在它们上设置标签。我不是这种方法的忠实拥护者,但是如果您小心的话,它会很好用。如果你想设置一些更复杂的动态加载按钮,你应该考虑子类化 UITabBar。

enter image description here

现在重要的是右边的“标签”设置。您需要为那里的每个按钮设置一个数字。在这种情况下,我将它们设置为 0、1 和 2,因为这或多或少与数组的计数方式相关,但您可以自由选择任何数字。

设置好之后我们可以看一下代码:

.h文件:

#import <UIKit/UIKit.h>

@interface LVDViewController : UIViewController<UITabBarDelegate>
// implementing the delegate allows you to drag and drop the delegate reference from the first screenshot

@property (weak, nonatomic) IBOutlet UIWebView *webView;
@property (weak, nonatomic) IBOutlet UITabBar *tabBar;

@end

.m文件:

#import "LVDViewController.h"

@interface LVDViewController ()

@end

@implementation LVDViewController

- (void)viewDidLoad;
{
[super viewDidLoad];
// Set the first item as selected. It will automatically load Google
[self tabBar:self.tabBar didSelectItem:[self.tabBar.items firstObject]];
self.tabBar.selectedItem = [self.tabBar.items firstObject];
// This is optional
}

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;
{
NSString *searchEngineURLString = nil;
switch (item.tag)
{
case 0:
searchEngineURLString = @"https://google.com";
break;
case 1:
searchEngineURLString = @"https://duckduckgo.com";
break;
case 2:
searchEngineURLString = @"https://bing.com";
break;
}

[self loadSearchEngine:searchEngineURLString];
}

- (void)loadSearchEngine:(NSString *)searchEngineURLString;
{
NSURL *searchEngineURL = [NSURL URLWithString:searchEngineURLString];
NSURLRequest *searchEngineRequest = [NSURLRequest requestWithURL:searchEngineURL];
[self.webView loadRequest:searchEngineRequest];
}

@end

Xcode 6 中的 Swift 解决方案

现在我们有了 Objective-C 版本,是时候使用它的 Swift 版本了。首先,我们再次在 Interface Builder 中设置我们的 View ,这次 Bing 是最喜欢的搜索引擎而不是谷歌,以反射(reflect)新的 Apple 观点。它几乎完全相同,您还必须再次将标签添加到标签栏项目。

enter image description here

我们又有了 View Controller ,但现在我们使用的是 Swift,所以它只有一个文件:

import UIKit

class ViewController: UIViewController, UITabBarDelegate {
@IBOutlet var tabBar : UITabBar
@IBOutlet var webView : UIWebView

override func viewDidLoad() {
super.viewDidLoad()

loadSearchEngine("https://www.bing.com")
tabBar.selectedItem = tabBar.items[0] as UITabBarItem;
}

func tabBar(tabBar: UITabBar!, didSelectItem item: UITabBarItem!) {
var searchEngineURLString: NSString! = "";

switch item.tag {
case 0:
searchEngineURLString = "https://www.bing.com"
break
case 1:
searchEngineURLString = "https://www.duckduckgo.com"
break
case 2:
searchEngineURLString = "https://www.google.com"
break
default:
searchEngineURLString = "https://www.bing.com"
break
}

loadSearchEngine(searchEngineURLString);
}

func loadSearchEngine(searchEngineURLString: NSString!) {
var searchEngineURL = NSURL(string: searchEngineURLString)
var searchEngineURLRequest = NSURLRequest(URL: searchEngineURL)
webView.loadRequest(searchEngineURLRequest)
}
}

关于ios - 使用不带 UITabBarController 的 UITabBar 来控制 UIWebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24221935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com