Merge pull request #216 from NativeScript/tab-view-images

Added functionality to specify images on TabView tabs.
This commit is contained in:
Rossen Hristov
2015-03-24 09:41:21 +02:00
3 changed files with 61 additions and 8 deletions

View File

@ -3,6 +3,7 @@ import definition = require("ui/tab-view");
import dependencyObservable = require("ui/core/dependency-observable"); import dependencyObservable = require("ui/core/dependency-observable");
import view = require("ui/core/view"); import view = require("ui/core/view");
import trace = require("trace"); import trace = require("trace");
import imageSource = require("image-source");
var VIEWS_STATES = "_viewStates"; var VIEWS_STATES = "_viewStates";
@ -141,6 +142,7 @@ export class TabView extends common.TabView {
private _tabsAddedByMe = new Array<android.app.ActionBar.Tab>(); private _tabsAddedByMe = new Array<android.app.ActionBar.Tab>();
private _tabsCache = {}; private _tabsCache = {};
private _androidViewId: number; private _androidViewId: number;
private _iconsCache = {};
constructor() { constructor() {
super(); super();
@ -358,6 +360,7 @@ export class TabView extends common.TabView {
item = newItems[i]; item = newItems[i];
tab = actionBar.newTab(); tab = actionBar.newTab();
tab.setText(item.title); tab.setText(item.title);
this._setIcon(item.iconSource, tab);
tab.setTabListener(this._tabListener); tab.setTabListener(this._tabListener);
@ -367,6 +370,26 @@ export class TabView extends common.TabView {
} }
} }
private _setIcon(iconSource: string, tab: android.app.ActionBar.Tab): void {
if (!iconSource) {
return;
}
var drawable: android.graphics.drawable.BitmapDrawable;
drawable = this._iconsCache[iconSource];
if (!drawable) {
var is = imageSource.fromFileOrResource(iconSource);
if (is) {
drawable = new android.graphics.drawable.BitmapDrawable(is.android);
this._iconsCache[iconSource] = drawable;
}
}
if (drawable) {
tab.setIcon(drawable);
}
}
public _removeTabs(oldItems: Array<definition.TabViewItem>) { public _removeTabs(oldItems: Array<definition.TabViewItem>) {
trace.write("TabView._removeTabs(" + oldItems + ");", common.traceCategory); trace.write("TabView._removeTabs(" + oldItems + ");", common.traceCategory);
super._removeTabs(oldItems); super._removeTabs(oldItems);

View File

@ -18,6 +18,11 @@ declare module "ui/tab-view" {
* Gets or sets the view of the TabViewItem. * Gets or sets the view of the TabViewItem.
*/ */
view: view.View; view: view.View;
/**
* Gets or sets the icon source of the TabViewItem. This could either be a a file name or resource id.
*/
iconSource?: string;
} }
/** /**

View File

@ -5,6 +5,7 @@ import utilsModule = require("utils/utils");
import trace = require("trace"); import trace = require("trace");
import utils = require("utils/utils"); import utils = require("utils/utils");
import view = require("ui/core/view"); import view = require("ui/core/view");
import imageSource = require("image-source");
// merge the exports of the common file with the exports of this file // merge the exports of the common file with the exports of this file
declare var exports; declare var exports;
@ -85,6 +86,7 @@ export class TabView extends common.TabView {
private _moreNavigationControllerDelegate: UINavigationControllerDelegateImpl; private _moreNavigationControllerDelegate: UINavigationControllerDelegateImpl;
private _tabBarHeight: number = 0; private _tabBarHeight: number = 0;
private _navBarHeight: number = 0; private _navBarHeight: number = 0;
private _iconsCache = {};
constructor() { constructor() {
super(); super();
@ -138,24 +140,28 @@ export class TabView extends common.TabView {
var i: number; var i: number;
var length = newItems.length; var length = newItems.length;
var newItem: definition.TabViewItem; var item: definition.TabViewItem;
var newControllers: NSMutableArray = NSMutableArray.alloc().initWithCapacity(length); var newControllers: NSMutableArray = NSMutableArray.alloc().initWithCapacity(length);
var newController: UIViewController; var newController: UIViewController;
for (i = 0; i < length; i++) { for (i = 0; i < length; i++) {
newItem = newItems[i]; item = newItems[i];
this._addView(newItem.view); this._addView(item.view);
if (newItem.view.ios instanceof UIViewController) { if (item.view.ios instanceof UIViewController) {
newController = <UIViewController>newItem.view.ios; newController = <UIViewController>item.view.ios;
} else { } else {
newController = new UIViewController(); newController = new UIViewController();
newController.view.addSubview(newItem.view.ios); newController.view.addSubview(item.view.ios);
}
var icon = this._getIcon(item.iconSource);
newController.tabBarItem = UITabBarItem.alloc().initWithTitleImageTag(item.title, icon, i);
if (!icon) {
newController.tabBarItem.setTitlePositionAdjustment({ horizontal: 0, vertical: -20 });
} }
newController.tabBarItem = UITabBarItem.alloc().initWithTitleImageTag(newItem.title, null, -1);
newController.tabBarItem.setTitlePositionAdjustment({ horizontal: 0, vertical: -20 });
newControllers.addObject(newController); newControllers.addObject(newController);
} }
@ -166,6 +172,25 @@ export class TabView extends common.TabView {
this._ios.moreNavigationController.delegate = this._moreNavigationControllerDelegate; this._ios.moreNavigationController.delegate = this._moreNavigationControllerDelegate;
} }
private _getIcon(iconSource: string): UIImage {
if (!iconSource) {
return null;
}
var image: UIImage;
image = this._iconsCache[iconSource];
if (!image) {
var is = imageSource.fromFileOrResource(iconSource);
if (is && is.ios) {
is.ios.renderingMode = UIImageRenderingMode.UIImageRenderingModeAlwaysOriginal;
this._iconsCache[iconSource] = is.ios;
image = is.ios;
}
}
return image;
}
public _onSelectedIndexPropertyChangedSetNativeValue(data: dependencyObservable.PropertyChangeData) { public _onSelectedIndexPropertyChangedSetNativeValue(data: dependencyObservable.PropertyChangeData) {
super._onSelectedIndexPropertyChangedSetNativeValue(data); super._onSelectedIndexPropertyChangedSetNativeValue(data);