mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-17 04:41:36 +08:00

recycleNativeView filed now accepts: "always" | "never" | "auto". Always will recycle the nativeView no matter if its nativeView or android proprties are accessed. Never will disable recycling. Auto will recycle it only if nativeView and android properties are not accessed.
86 lines
2.9 KiB
TypeScript
86 lines
2.9 KiB
TypeScript
import {
|
|
SwitchBase, layout, Color, colorProperty, backgroundColorProperty, backgroundInternalProperty, checkedProperty
|
|
} from "./switch-common";
|
|
|
|
export * from "./switch-common";
|
|
|
|
class SwitchChangeHandlerImpl extends NSObject {
|
|
|
|
private _owner: WeakRef<Switch>;
|
|
|
|
public static initWithOwner(owner: WeakRef<Switch>): SwitchChangeHandlerImpl {
|
|
let handler = <SwitchChangeHandlerImpl>SwitchChangeHandlerImpl.new();
|
|
handler._owner = owner;
|
|
return handler;
|
|
}
|
|
|
|
public valueChanged(sender: UISwitch) {
|
|
let owner = this._owner.get();
|
|
if (owner) {
|
|
checkedProperty.nativeValueChange(owner, sender.on);
|
|
}
|
|
}
|
|
|
|
public static ObjCExposedMethods = {
|
|
'valueChanged': { returns: interop.types.void, params: [UISwitch] }
|
|
};
|
|
}
|
|
|
|
const zeroSize = { width: 0, height: 0 };
|
|
export class Switch extends SwitchBase {
|
|
nativeViewProtected: UISwitch;
|
|
private _handler: NSObject;
|
|
|
|
constructor() {
|
|
super();
|
|
const nativeView = UISwitch.new();
|
|
this._handler = SwitchChangeHandlerImpl.initWithOwner(new WeakRef(this));
|
|
nativeView.addTargetActionForControlEvents(this._handler, "valueChanged", UIControlEvents.ValueChanged);
|
|
this.nativeViewProtected = nativeView;
|
|
this.width = 51;
|
|
this.height = 31;
|
|
}
|
|
|
|
get ios(): UISwitch {
|
|
return this.nativeViewProtected;
|
|
}
|
|
|
|
public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void {
|
|
// It can't be anything different from 51x31
|
|
let nativeSize = this.nativeViewProtected.sizeThatFits(zeroSize);
|
|
this.width = nativeSize.width;
|
|
this.height = nativeSize.height;
|
|
|
|
const widthAndState = Switch.resolveSizeAndState(layout.toDevicePixels(nativeSize.width), layout.toDevicePixels(51), layout.EXACTLY, 0);
|
|
const heightAndState = Switch.resolveSizeAndState(layout.toDevicePixels(nativeSize.height), layout.toDevicePixels(31), layout.EXACTLY, 0);
|
|
this.setMeasuredDimension(widthAndState, heightAndState);
|
|
}
|
|
|
|
[checkedProperty.getDefault](): boolean {
|
|
return false;
|
|
}
|
|
[checkedProperty.setNative](value: boolean) {
|
|
this.nativeViewProtected.on = value;
|
|
}
|
|
|
|
[colorProperty.getDefault](): UIColor {
|
|
return this.nativeViewProtected.thumbTintColor;
|
|
}
|
|
[colorProperty.setNative](value: UIColor | Color) {
|
|
this.nativeViewProtected.thumbTintColor = value instanceof Color ? value.ios : value;
|
|
}
|
|
|
|
[backgroundColorProperty.getDefault](): UIColor {
|
|
return this.nativeViewProtected.onTintColor;
|
|
}
|
|
[backgroundColorProperty.setNative](value: UIColor | Color) {
|
|
this.nativeViewProtected.onTintColor = value instanceof Color ? value.ios : value;
|
|
}
|
|
|
|
[backgroundInternalProperty.getDefault](): any {
|
|
return null;
|
|
}
|
|
[backgroundInternalProperty.setNative](value: any) {
|
|
//
|
|
}
|
|
} |