diff --git a/ui/segmented-bar/segmented-bar.android.ts b/ui/segmented-bar/segmented-bar.android.ts index 4f91ec0df..5097591bb 100644 --- a/ui/segmented-bar/segmented-bar.android.ts +++ b/ui/segmented-bar/segmented-bar.android.ts @@ -46,10 +46,8 @@ function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) { if (newItems && newItems.length) { for (var i = 0; i < newItems.length; i++) { (newItems[i])._parent = view; - var title = "" + newItems[i].title; var tab = view.android.newTabSpec(i + ""); - - tab.setIndicator(title); + tab.setIndicator(newItems[i].title || ""); tab.setContent(new android.widget.TabHost.TabContentFactory({ createTabContent: function (tag: string): android.view.View { @@ -124,7 +122,7 @@ export class SegmentedBarItem extends common.SegmentedBarItem { var tabIndex = this._parent.items.indexOf(this); var titleTextViewId = 16908310; // http://developer.android.com/reference/android/R.id.html#title var titleTextView = this._parent.android.getTabWidget().getChildAt(tabIndex).findViewById(titleTextViewId); - titleTextView.setText("" + this.title); + titleTextView.setText(this.title || ""); } } } diff --git a/ui/segmented-bar/segmented-bar.ios.ts b/ui/segmented-bar/segmented-bar.ios.ts index 094101c6e..f127a417f 100644 --- a/ui/segmented-bar/segmented-bar.ios.ts +++ b/ui/segmented-bar/segmented-bar.ios.ts @@ -43,7 +43,7 @@ function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) { var newItems = >data.newValue; if (newItems && newItems.length) { for (var i = 0; i < newItems.length; i++) { - view.ios.insertSegmentWithTitleAtIndexAnimated(newItems[i].title, i, false); + view.ios.insertSegmentWithTitleAtIndexAnimated(newItems[i].title || "", i, false); (newItems[i])._parent = view; } @@ -70,7 +70,7 @@ export class SegmentedBarItem extends common.SegmentedBarItem { public _update() { if (this._parent) { var tabIndex = this._parent.items.indexOf(this); - this._parent.ios.setTitleForSegmentAtIndex("" + this.title, tabIndex); + this._parent.ios.setTitleForSegmentAtIndex(this.title || "", tabIndex); } } } diff --git a/ui/tab-view/tab-view-common.ts b/ui/tab-view/tab-view-common.ts index 3459e6f7a..4b51cc1c0 100644 --- a/ui/tab-view/tab-view-common.ts +++ b/ui/tab-view/tab-view-common.ts @@ -20,6 +20,7 @@ export class TabViewItem extends bindable.Bindable implements definition.TabView set title(value: string) { if (this._title !== value) { this._title = value; + this._update(); } } @@ -29,6 +30,9 @@ export class TabViewItem extends bindable.Bindable implements definition.TabView set view(value: view.View) { if (this._view !== value) { + if (this._view) { + throw new Error("Changing the view of an already loaded TabViewItem is not currently supported."); + } this._view = value; } } @@ -40,8 +44,13 @@ export class TabViewItem extends bindable.Bindable implements definition.TabView set iconSource(value: string) { if (this._iconSource !== value) { this._iconSource = value; + this._update(); } } + + public _update() { + // + } } var TAB_VIEW = "TabView"; diff --git a/ui/tab-view/tab-view.android.ts b/ui/tab-view/tab-view.android.ts index 53291f0c4..d80d94266 100644 --- a/ui/tab-view/tab-view.android.ts +++ b/ui/tab-view/tab-view.android.ts @@ -133,6 +133,20 @@ class PagerAdapterClass extends android.support.v4.view.PagerAdapter { } }; +export class TabViewItem extends common.TabViewItem { + public _tab: android.app.ActionBar.Tab; + public _parent: TabView; + + public _update() { + if (this._parent && this._tab) { + var androidApp = app.android; + var resources = androidApp.context.getResources(); + this._tab.setText(this.title); + this._parent._setIcon(this.iconSource, this._tab, resources, androidApp.packageName); + } + } +} + export class TabView extends common.TabView { private _android: android.support.v4.view.ViewPager; private _pagerAdapter: android.support.v4.view.PagerAdapter; @@ -374,13 +388,15 @@ export class TabView extends common.TabView { // TODO: Where will be the support for more ActionBar settings like Title, Navigation buttons, etc.? var i: number = 0; var length = newItems.length; - var item: definition.TabViewItem; + var item: TabViewItem; var tab: android.app.ActionBar.Tab; var androidApp = app.android; var resources = androidApp.context.getResources(); for (i; i < length; i++) { - item = newItems[i]; + item = newItems[i]; tab = actionBar.newTab(); + item._tab = tab; + item._parent = this; tab.setText(item.title); this._setIcon(item.iconSource, tab, resources, androidApp.packageName); @@ -392,7 +408,7 @@ export class TabView extends common.TabView { } } - private _setIcon(iconSource: string, tab: android.app.ActionBar.Tab, resources: android.content.res.Resources, packageName: string): void { + public _setIcon(iconSource: string, tab: android.app.ActionBar.Tab, resources: android.content.res.Resources, packageName: string): void { if (!iconSource) { return; } @@ -438,7 +454,7 @@ export class TabView extends common.TabView { var i: number = actionBar.getTabCount() - 1; var tab: android.app.ActionBar.Tab; var index; - for (i; i >= 0; i--) { + for (; i >= 0; i--) { tab = actionBar.getTabAt(i); index = this._tabsAddedByMe.indexOf(tab); if (index > -1) {// This tab was added by me. @@ -449,6 +465,15 @@ export class TabView extends common.TabView { } } + i = 0; + var length = this.items.length; + var item: TabViewItem; + for (; i < length; i++) { + item = this.items[i]; + item._tab = null; + item._parent = null; + } + if (this._tabsAddedByMe.length > 0) { throw new Error("TabView did not remove all of its tabs from the ActionBar."); } diff --git a/ui/tab-view/tab-view.ios.ts b/ui/tab-view/tab-view.ios.ts index e0201fc4c..9df7bfcbd 100644 --- a/ui/tab-view/tab-view.ios.ts +++ b/ui/tab-view/tab-view.ios.ts @@ -73,6 +73,22 @@ class UINavigationControllerDelegateImpl extends NSObject implements UINavigatio } } +export class TabViewItem extends common.TabViewItem { + public _controller: UIViewController; + public _parent: TabView; + + public _update() { + if (this._parent && this._controller) { + var icon = this._parent._getIcon(this.iconSource); + var tabBarItem = UITabBarItem.alloc().initWithTitleImageTag((this.title || ""), icon, this._parent.items.indexOf(this)); + if (!icon) { + tabBarItem.setTitlePositionAdjustment({ horizontal: 0, vertical: -20 }); + } + this._controller.tabBarItem = tabBarItem; + } + } +} + export class TabView extends common.TabView { private _ios: UITabBarControllerImpl; private _delegate: UITabBarControllerDelegateImpl; @@ -128,9 +144,11 @@ export class TabView extends common.TabView { var i: number; var length = oldItems.length; - var oldItem: definition.TabViewItem; + var oldItem: TabViewItem; for (i = 0; i < length; i++) { - oldItem = oldItems[i]; + oldItem = oldItems[i]; + oldItem._parent = null; + oldItem._controller = null; this._removeView(oldItem.view); } @@ -143,12 +161,12 @@ export class TabView extends common.TabView { var i: number; var length = newItems.length; - var item: definition.TabViewItem; + var item: TabViewItem; var newControllers: NSMutableArray = NSMutableArray.alloc().initWithCapacity(length); var newController: UIViewController; for (i = 0; i < length; i++) { - item = newItems[i]; + item = newItems[i]; this._addView(item.view); @@ -159,12 +177,16 @@ export class TabView extends common.TabView { 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 }); - } + item._parent = this; + item._controller = newController; + var icon = this._getIcon(item.iconSource); + + var tabBarItem = UITabBarItem.alloc().initWithTitleImageTag((item.title || ""), icon, i); + if (!icon) { + tabBarItem.setTitlePositionAdjustment({ horizontal: 0, vertical: -20 }); + } + newController.tabBarItem = tabBarItem; newControllers.addObject(newController); } @@ -175,7 +197,7 @@ export class TabView extends common.TabView { this._ios.moreNavigationController.delegate = this._moreNavigationControllerDelegate; } - private _getIcon(iconSource: string): UIImage { + public _getIcon(iconSource: string): UIImage { if (!iconSource) { return null; }