blob: 09b41056fdfec6fdec7c4b129a7675490b9b8569 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#import "UIViewController+WXDemoNaviBar.h"
#import "WXScannerVC.h"
#import "WXScannerHistoryVC.h"
#import "WXDefine.h"
#import <objc/runtime.h>
@implementation UIViewController (WXDemoNaviBar)
- (void)setupNaviBar
{
UIScreenEdgePanGestureRecognizer *edgePanGestureRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(edgePanGesture:)];
edgePanGestureRecognizer.delegate = self;
edgePanGestureRecognizer.edges = UIRectEdgeLeft;
[self.view addGestureRecognizer:edgePanGestureRecognizer];
NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
// iOS 7.0 or later
self.navigationController.navigationBar.barTintColor = WEEX_COLOR;
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}];
self.navigationController.navigationBar.translucent = NO;
}
if (!self.navigationItem.leftBarButtonItem) {
UIBarButtonItem *leftItem;
if(![[self.navigationController.viewControllers objectAtIndex:0] isEqual:self]) {
leftItem = [self backButtonItem];
} else {
leftItem = [self leftBarButtonItem];
}
self.navigationItem.leftBarButtonItems = @[leftItem];
}
if ([self isKindOfClass:[WXScannerVC class]]) {
UIBarButtonItem *historyItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"scan_history"]
style:UIBarButtonItemStylePlain
target:self
action:@selector(historyButtonClicked:)];
self.navigationItem.rightBarButtonItems = @[historyItem];
}
if([self isKindOfClass:[WXScannerHistoryVC class]]) {
UIBarButtonItem *historyItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"delete"]
style:UIBarButtonItemStylePlain
target:self
action:@selector(clearScannerHistory:)];
self.navigationItem.rightBarButtonItems = @[historyItem];
}
}
- (void)edgePanGesture:(UIScreenEdgePanGestureRecognizer*)edgePanGestureRecognizer
{
[self.navigationController popViewControllerAnimated:YES];
}
#pragma mark- UIGestureRecognizerDelegate
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if (self.navigationController && [self.navigationController.viewControllers count] == 1) {
return NO;
}
return YES;
}
#pragma mark -
#pragma mark - UIBarButtonItems
- (UIBarButtonItem *)leftBarButtonItem
{
UIBarButtonItem *leftItem = objc_getAssociatedObject(self, _cmd);
if (!leftItem) {
leftItem = [[UIBarButtonItem alloc]
initWithImage:[UIImage imageNamed:@"scan"]
style:UIBarButtonItemStylePlain
target:self
action:@selector(scanQR:)];
leftItem.accessibilityHint = @"click to scan qr code";
leftItem.accessibilityValue = @"scan qr code";
objc_setAssociatedObject(self, _cmd, leftItem, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
return leftItem;
}
- (UIBarButtonItem *)backButtonItem
{
UIBarButtonItem *backButtonItem = objc_getAssociatedObject(self, _cmd);
if (!backButtonItem) {
backButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back"]
style:UIBarButtonItemStylePlain
target:self
action:@selector(backButtonClicked:)];
objc_setAssociatedObject(self, _cmd, backButtonItem, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
return backButtonItem;
}
#pragma mark -
#pragma mark - UIBarButtonItem actions
- (void)scanQR:(id)sender {
WXScannerVC * scanViewController = [[WXScannerVC alloc] init];
[self.navigationController pushViewController:scanViewController animated:YES];
}
- (void)backButtonClicked:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
- (void)historyButtonClicked:(id)sender {
[self.navigationController pushViewController:[WXScannerHistoryVC new] animated:YES];
}
- (void)clearScannerHistory:(id)sender {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:WX_SCANNER_HISTORY];
}
@end