mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 11:42:04 +08:00
Added TabViewItem change support for Android. Fixed empty titles for SegmentedBar and TabView.
This commit is contained in:
@ -46,10 +46,8 @@ function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||
if (newItems && newItems.length) {
|
||||
for (var i = 0; i < newItems.length; i++) {
|
||||
(<SegmentedBarItem>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 = <android.widget.TextView>this._parent.android.getTabWidget().getChildAt(tabIndex).findViewById(titleTextViewId);
|
||||
titleTextView.setText("" + this.title);
|
||||
titleTextView.setText(this.title || "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||
var newItems = <Array<definition.SegmentedBarItem>>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);
|
||||
(<SegmentedBarItem>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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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";
|
||||
|
@ -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 = <TabViewItem>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 = <TabViewItem>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.");
|
||||
}
|
||||
|
@ -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 = <TabViewItem>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 = <TabViewItem>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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user