使用不带UITabBarController的UITabBar来控制UIWebView

dev*_*vth 7 ios

我想用a UITabBar来让用户导航一个UIWebView.这是可能的还是我会更好地使用UIToolbar?如果最好使用a UIToolbar,我将如何模拟按钮的"选定"视觉状态,UITabBar本机的方式呢?

Dep*_*o B 25

UITabBar没有UITabBarController来控制UIWebView

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

Xcode 5中的Objective-C解决方案

在这个Objective-C示例中,您可以在UITabBar中切换三个搜索引擎.

首先,您需要设置视图,如下所示:(除非先将UITabBarDelegate添加到ViewController,否则无法设置代理插座,请参阅代码)

在此输入图像描述

现在因为您没有直接引用UITabBar中的项目,因为我们在Interface Builder中设置了所有项目,您需要在它们上设置标记.我不是这种方法的忠实粉丝但如果你注意它就可以了.如果你想用动态加载按钮设置更复杂的东西,你应该考虑继承UITabBar.

在此输入图像描述

现在重要的是右侧的"标签"设置.您需要为每个按钮设置一个数字.在这种情况下,我将它们设置为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
Run Code Online (Sandbox Code Playgroud)

.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
Run Code Online (Sandbox Code Playgroud)

Xcode 6中的Swift解决方案

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

在此输入图像描述

我们再次使用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)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 真棒.谢谢您的详细示例! (3认同)