segmented bar selectedIndexChanged fix

This commit is contained in:
Vladimir Enchev
2015-09-25 11:10:17 +03:00
parent 84b3eb545d
commit 9e07a2344b
5 changed files with 42 additions and 9 deletions

View File

@ -15,4 +15,8 @@ export function checkNativeItemsTextColor(bar: segmentedBarModule.SegmentedBar):
}
return isValid;
}
export function setNativeSelectedIndex(bar: segmentedBarModule.SegmentedBar, index: number): void {
(<android.widget.TabHost>bar.android).setCurrentTab(index);
}

View File

@ -2,5 +2,6 @@
import segmentedBarModule = require("ui/segmented-bar");
export declare function getNativeItemsCount(bar: segmentedBarModule.SegmentedBar): number;
export declare function setNativeSelectedIndex(bar: segmentedBarModule.SegmentedBar, index: number): void;
export declare function checkNativeItemsTextColor(bar: segmentedBarModule.SegmentedBar): boolean;

View File

@ -11,4 +11,9 @@ export function checkNativeItemsTextColor(bar: segmentedBarModule.SegmentedBar):
isValid = bar.color && attrs && attrs.valueForKey(NSForegroundColorAttributeName) === bar.color.ios;
return isValid;
}
export function setNativeSelectedIndex(bar: segmentedBarModule.SegmentedBar, index: number): void {
bar.ios.selectedSegmentIndex = index;
(<UISegmentedControl>bar.ios).sendActionsForControlEvents(UIControlEvents.UIControlEventValueChanged);
}

View File

@ -221,3 +221,32 @@ export var testSelectedIndexChangedIsReisedCorrectlyIfSelectedIndexIsSet = funct
TKUnit.assertEqual(newIndex, 9);
});
}
export var testSelectedIndexChangedIsReisedCorrectlyIfSelectedIndexIsSetNative = function () {
var oldIndex;
var newIndex;
var segmentedBar = _createSegmentedBar();
segmentedBar.on(segmentedBarModule.SegmentedBar.selectedIndexChangedEvent, (args: segmentedBarModule.SelectedIndexChangedEventData) => {
oldIndex = args.oldIndex;
newIndex = args.newIndex;
});
segmentedBar.items = _createItems(10);
helper.buildUIAndRunTest(segmentedBar, function (views: Array<viewModule.View>) {
var segmentedBar = <segmentedBarModule.SegmentedBar>views[0];
segmentedBarTestsNative.setNativeSelectedIndex(segmentedBar, 6);
TKUnit.assertEqual(oldIndex, 0);
TKUnit.assertEqual(newIndex, 6);
segmentedBarTestsNative.setNativeSelectedIndex(segmentedBar, 3);
TKUnit.assertEqual(oldIndex, 6);
TKUnit.assertEqual(newIndex, 3);
segmentedBarTestsNative.setNativeSelectedIndex(segmentedBar, 9);
TKUnit.assertEqual(oldIndex, 3);
TKUnit.assertEqual(newIndex, 9);
});
}

View File

@ -3,6 +3,7 @@ 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");
import observable = require("data/observable");
global.moduleMerge(common, exports);
@ -17,13 +18,11 @@ function onSelectedIndexPropertyChanged(data: dependencyObservable.PropertyChang
if (types.isNumber(index)) {
if (index >= 0 && index <= view.items.length - 1) {
view.android.setCurrentTab(index);
view.notify({ eventName: SegmentedBar.selectedIndexChangedEvent, object: view, oldIndex: data.oldValue, newIndex: data.newValue });
} else {
view.selectedIndex = undefined;
throw new Error("selectedIndex should be between [0, items.length - 1]");
}
var args = { eventName: SegmentedBar.selectedIndexChangedEvent, object: view, oldIndex: data.oldValue, newIndex: data.newValue };
view.notify(args);
}
}
(<proxy.PropertyMetadata>common.SegmentedBar.selectedIndexProperty.metadata).onSetNativeValue = onSelectedIndexPropertyChanged;
@ -146,12 +145,7 @@ export class SegmentedBar extends common.SegmentedBar {
onTabChanged: function (id: string) {
var bar = that.get();
if (bar) {
var oldIndex = bar.selectedIndex;
var newIndex = parseInt(id);
if (oldIndex !== newIndex) {
bar._onPropertyChangedFromNative(SegmentedBar.selectedIndexProperty, newIndex);
}
bar.selectedIndex = parseInt(id);
}
}
});