mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
segmented-bar tests & fixes
This commit is contained in:
@@ -3,6 +3,7 @@ import view = require("ui/core/view");
|
||||
import proxy = require("ui/core/proxy");
|
||||
import dependencyObservable = require("ui/core/dependency-observable");
|
||||
import color = require("color");
|
||||
import types = require("utils/types");
|
||||
|
||||
export module knownCollections {
|
||||
export var items = "items";
|
||||
@@ -15,9 +16,17 @@ export class SegmentedBar extends view.View implements definition.SegmentedBar {
|
||||
}
|
||||
}
|
||||
|
||||
public _adjustSelectedIndex() {
|
||||
if (this.selectedIndex > this.items.length - 1) {
|
||||
this._setValue(SegmentedBar.selectedIndexProperty, this.items.length - 1);
|
||||
public _adjustSelectedIndex(items: Array<definition.SegmentedBarItem>) {
|
||||
if (this.items) {
|
||||
if (this.items.length > 0) {
|
||||
if (types.isUndefined(this.selectedIndex) || (this.selectedIndex > this.items.length - 1)) {
|
||||
this._setValue(SegmentedBar.selectedIndexProperty, 0);
|
||||
}
|
||||
} else {
|
||||
this._setValue(SegmentedBar.selectedIndexProperty, undefined);
|
||||
}
|
||||
} else {
|
||||
this._setValue(SegmentedBar.selectedIndexProperty, undefined);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,11 +48,11 @@ export class SegmentedBar extends view.View implements definition.SegmentedBar {
|
||||
return this._getValue(SegmentedBar.selectedBackgroundColorProperty);
|
||||
}
|
||||
set selectedBackgroundColor(value: color.Color) {
|
||||
this._setValue(SegmentedBar.selectedBackgroundColorProperty,
|
||||
this._setValue(SegmentedBar.selectedBackgroundColorProperty,
|
||||
value instanceof color.Color ? value : new color.Color(<any>value));
|
||||
}
|
||||
|
||||
public static selectedBackgroundColorProperty = new dependencyObservable.Property("selectedBackgroundColor", "SegmentedBar", new proxy.PropertyMetadata(undefined))
|
||||
public static selectedIndexProperty = new dependencyObservable.Property("selectedIndex", "SegmentedBar", new proxy.PropertyMetadata(0))
|
||||
public static selectedIndexProperty = new dependencyObservable.Property("selectedIndex", "SegmentedBar", new proxy.PropertyMetadata(undefined))
|
||||
public static itemsProperty = new dependencyObservable.Property("items", "SegmentedBar", new proxy.PropertyMetadata(undefined))
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
import common = require("ui/segmented-bar/segmented-bar-common");
|
||||
import definition = require("ui/segmented-bar");
|
||||
import common = require("ui/segmented-bar/segmented-bar-common");
|
||||
import dependencyObservable = require("ui/core/dependency-observable");
|
||||
import proxy = require("ui/core/proxy");
|
||||
import types = require("utils/types");
|
||||
@@ -15,8 +16,13 @@ function onSelectedIndexPropertyChanged(data: dependencyObservable.PropertyChang
|
||||
|
||||
var index = <number>data.newValue;
|
||||
|
||||
if (types.isNumber(index) && index >= 0 && index <= view.items.length - 1) {
|
||||
view.android.setCurrentTab(index);
|
||||
if (types.isNumber(index)) {
|
||||
if (index >= 0 && index <= view.items.length - 1) {
|
||||
view.android.setCurrentTab(index);
|
||||
} else {
|
||||
view.selectedIndex = undefined;
|
||||
throw new Error("selectedIndex should be between [0, items.length - 1]");
|
||||
}
|
||||
}
|
||||
}
|
||||
(<proxy.PropertyMetadata>common.SegmentedBar.selectedIndexProperty.metadata).onSetNativeValue = onSelectedIndexPropertyChanged;
|
||||
@@ -29,7 +35,9 @@ function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||
|
||||
view.android.clearAllTabs();
|
||||
|
||||
var newItems = <Array<any>>data.newValue;
|
||||
var newItems = <Array<definition.SegmentedBarItem>>data.newValue;
|
||||
|
||||
view._adjustSelectedIndex(newItems);
|
||||
|
||||
if (newItems && newItems.length) {
|
||||
for (var i = 0; i < newItems.length; i++) {
|
||||
@@ -49,8 +57,6 @@ function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||
view.android.addTab(tab);
|
||||
}
|
||||
|
||||
view._adjustSelectedIndex();
|
||||
|
||||
if (view.android.getCurrentTab() !== view.selectedIndex) {
|
||||
view.android.setCurrentTab(view.selectedIndex);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import common = require("ui/segmented-bar/segmented-bar-common");
|
||||
import definition = require("ui/segmented-bar");
|
||||
import common = require("ui/segmented-bar/segmented-bar-common");
|
||||
import dependencyObservable = require("ui/core/dependency-observable");
|
||||
import proxy = require("ui/core/proxy");
|
||||
import types = require("utils/types");
|
||||
@@ -15,8 +16,13 @@ function onSelectedIndexPropertyChanged(data: dependencyObservable.PropertyChang
|
||||
}
|
||||
|
||||
var index = <number>data.newValue;
|
||||
if (types.isNumber(index) && index >= 0 && index <= view.items.length - 1) {
|
||||
view.ios.selectedSegmentIndex = index;
|
||||
if (types.isNumber(index)) {
|
||||
if (index >= 0 && index <= view.items.length - 1) {
|
||||
view.ios.selectedSegmentIndex = index;
|
||||
} else {
|
||||
view.selectedIndex = undefined;
|
||||
throw new Error("selectedIndex should be between [0, items.length - 1]");
|
||||
}
|
||||
}
|
||||
}
|
||||
(<proxy.PropertyMetadata>common.SegmentedBar.selectedIndexProperty.metadata).onSetNativeValue = onSelectedIndexPropertyChanged;
|
||||
@@ -27,16 +33,22 @@ function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
||||
return;
|
||||
}
|
||||
|
||||
var newItems = <Array<definition.SegmentedBarItem>>data.newValue;
|
||||
|
||||
console.log("SET ITEMS BEFORE: " + view.selectedIndex);
|
||||
view._adjustSelectedIndex(newItems);
|
||||
console.log("SET ITEMS AFTER: " + view.selectedIndex);
|
||||
|
||||
view.ios.removeAllSegments();
|
||||
|
||||
for (var i = 0; i < view.items.length; i++) {
|
||||
view.ios.insertSegmentWithTitleAtIndexAnimated(view.items[i].title, i, false);
|
||||
}
|
||||
if (newItems && newItems.length) {
|
||||
for (var i = 0; i < newItems.length; i++) {
|
||||
view.ios.insertSegmentWithTitleAtIndexAnimated(newItems[i].title, i, false);
|
||||
}
|
||||
|
||||
view._adjustSelectedIndex();
|
||||
|
||||
if (view.ios.selectedSegmentIndex !== view.selectedIndex) {
|
||||
view.ios.selectedSegmentIndex = view.selectedIndex;
|
||||
if (view.ios.selectedSegmentIndex !== view.selectedIndex) {
|
||||
view.ios.selectedSegmentIndex = view.selectedIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
(<proxy.PropertyMetadata>common.SegmentedBar.itemsProperty.metadata).onSetNativeValue = onItemsPropertyChanged;
|
||||
@@ -60,6 +72,7 @@ export class SegmentedBar extends common.SegmentedBar {
|
||||
constructor() {
|
||||
super();
|
||||
this._ios = UISegmentedControl.new();
|
||||
console.log("CREATE: " + this.selectedIndex);
|
||||
|
||||
this._selectionHandler = SelectionHandlerImpl.new().initWithOwner(this);
|
||||
this._ios.addTargetActionForControlEvents(this._selectionHandler, "selected", UIControlEvents.UIControlEventValueChanged);
|
||||
|
||||
Reference in New Issue
Block a user