Add TabView.iosIconRenderingMode property

Resolves #2689
This commit is contained in:
Rossen Hristov
2016-11-04 16:18:55 +02:00
parent 350498ef7b
commit 93cc666b8f
17 changed files with 89 additions and 1 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 915 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 669 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 669 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

@ -18,6 +18,7 @@ export function pageLoaded(args: EventData) {
examples.set("tabStyle", "tab-view/all");
examples.set("tabmore", "tab-view/tab-view-more");
examples.set("tabViewCss", "tab-view/tab-view-css");
examples.set("tab-view-icons", "tab-view/tab-view-icon");
let viewModel = new SubMainPageViewModel(wrapLayout, examples);
page.bindingContext = viewModel;

View File

@ -0,0 +1,14 @@
import { EventData } from "data/observable";
import { Button } from "ui/button";
import { TabView } from "ui/tab-view";
let iconModes = ["automatic", "alwaysOriginal", "alwaysTemplate", undefined];
export function onChangeRenderingMode(args: EventData){
let button = (<Button>args.object);
let tabView = button.page.getViewById<TabView>("tab-view");
tabView.iosIconRenderingMode = iconModes[(iconModes.indexOf(tabView.iosIconRenderingMode) + 1) % iconModes.length];
for(let i = 0, length = tabView.items.length; i < length; i++){
(<Button>tabView.items[i].view).text = "" + tabView.iosIconRenderingMode;
}
}

View File

@ -0,0 +1,26 @@
<Page xmlns="http://schemas.nativescript.org/tns.xsd">
<TabView id="tab-view" tabTextColor="green" selectedTabTextColor="red" tabBackgroundColor="yellow">
<TabView.items>
<TabViewItem iconSource="res://icon">
<TabViewItem.view>
<Button text="undefined" tap="onChangeRenderingMode"/>
</TabViewItem.view>
</TabViewItem>
<TabViewItem iconSource="res://add_to_fav">
<TabViewItem.view>
<Button text="undefined" tap="onChangeRenderingMode"/>
</TabViewItem.view>
</TabViewItem>
<TabViewItem iconSource="res://icon" title="NativeScript">
<TabViewItem.view>
<Button text="undefined" tap="onChangeRenderingMode"/>
</TabViewItem.view>
</TabViewItem>
<TabViewItem iconSource="res://add_to_fav" title="Favorites">
<TabViewItem.view>
<Button text="undefined" tap="onChangeRenderingMode"/>
</TabViewItem.view>
</TabViewItem>
</TabView.items>
</TabView>
</Page>

View File

@ -237,6 +237,13 @@ export class TabView extends View implements definition.TabView, AddArrayFromBui
this.style.textTransform = value;
}
get iosIconRenderingMode(): string {
return undefined;
}
set iosIconRenderingMode(value: string) {
//
}
public _onSelectedIndexPropertyChangedSetNativeValue(data: PropertyChangeData) {
var index = this.selectedIndex;
if (types.isUndefined(index)) {

View File

@ -105,6 +105,15 @@ declare module "ui/tab-view" {
*/
ios: any /* UITabBarController */;
/**
* Gets or set the UIImageRenderingMode of the tab icons in iOS.
* Valid values are:
* - automatic
* - alwaysOriginal
* - alwaysTemplate
*/
iosIconRenderingMode: string;
/**
* String value used when hooking to the selectedIndexChanged event.
*/

View File

@ -125,6 +125,7 @@ export class TabViewItem extends common.TabViewItem {
public _update() {
if (this._parent && this._controller) {
var icon = this._parent._getIcon(this.iconSource);
//TODO: Implement initWithSystemItem to support standard system icons
var tabBarItem = UITabBarItem.alloc().initWithTitleImageTag((this.title || ""), icon, this._parent.items.indexOf(this));
if (!icon) {
if (types.isFunction((<any>tabBarItem).setTitlePositionAdjustment)) {
@ -301,6 +302,36 @@ export class TabView extends common.TabView {
}
}
private _iconRenderingMode: string;
get iosIconRenderingMode(): string {
return this._iconRenderingMode;
}
set iosIconRenderingMode(value: string) {
if (this._iconRenderingMode !== value){
this._iconRenderingMode = value;
this._iconsCache = {};
if (this.items && this.items.length){
for (let i = 0, length = this.items.length; i < length; i++) {
if (this.items[i].iconSource) {
(<any>this.items[i])._update();
}
}
}
}
}
private _getIconRenderingMode(): UIImageRenderingMode {
switch(this._iconRenderingMode) {
case "alwaysOriginal":
return UIImageRenderingMode.AlwaysOriginal;
case "alwaysTemplate":
return UIImageRenderingMode.AlwaysTemplate;
case "automatic":
default:
return UIImageRenderingMode.Automatic;
}
}
public _getIcon(iconSource: string): UIImage {
if (!iconSource) {
return null;
@ -313,7 +344,7 @@ export class TabView extends common.TabView {
var is = imageSource.fromFileOrResource(iconSource);
if (is && is.ios) {
var originalRenderedImage = is.ios.imageWithRenderingMode(UIImageRenderingMode.Automatic);
var originalRenderedImage = is.ios.imageWithRenderingMode(this._getIconRenderingMode());
this._iconsCache[iconSource] = originalRenderedImage;
image = originalRenderedImage;
}