mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 11:42:04 +08:00
Added iosSwipeBackNavigationEnabled
This commit is contained in:
@ -1,9 +1,9 @@
|
|||||||
import {ContentView} from "ui/content-view";
|
import { ContentView } from "ui/content-view";
|
||||||
import view = require("ui/core/view");
|
import view = require("ui/core/view");
|
||||||
import dts = require("ui/page");
|
import dts = require("ui/page");
|
||||||
import styleScope = require("../styling/style-scope");
|
import styleScope = require("../styling/style-scope");
|
||||||
import {ActionBar} from "ui/action-bar";
|
import { ActionBar } from "ui/action-bar";
|
||||||
import {PropertyMetadataSettings, PropertyChangeData, Property, ValueSource} from "ui/core/dependency-observable";
|
import { PropertyMetadataSettings, PropertyChangeData, Property, ValueSource } from "ui/core/dependency-observable";
|
||||||
import * as style from "../styling/style";
|
import * as style from "../styling/style";
|
||||||
import * as fileSystemModule from "file-system";
|
import * as fileSystemModule from "file-system";
|
||||||
import * as frameModule from "ui/frame";
|
import * as frameModule from "ui/frame";
|
||||||
@ -41,9 +41,21 @@ function onActionBarHiddenPropertyChanged(data: PropertyChangeData) {
|
|||||||
|
|
||||||
(<proxy.PropertyMetadata>actionBarHiddenProperty.metadata).onSetNativeValue = onActionBarHiddenPropertyChanged;
|
(<proxy.PropertyMetadata>actionBarHiddenProperty.metadata).onSetNativeValue = onActionBarHiddenPropertyChanged;
|
||||||
|
|
||||||
|
const iosSwipeBackNavigationEnabledProperty = new Property("isoSwipeBackNavigationEnabled", "Page", new proxy.PropertyMetadata(true));
|
||||||
|
|
||||||
|
function iosSwipeBackNavigationEnabledPropertyChanged(data: PropertyChangeData) {
|
||||||
|
const page = <Page>data.object;
|
||||||
|
if (page.isLoaded) {
|
||||||
|
page._updateSwipeBackNavigationEnabled(data.newValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(<proxy.PropertyMetadata>iosSwipeBackNavigationEnabledProperty.metadata).onSetNativeValue = iosSwipeBackNavigationEnabledPropertyChanged;
|
||||||
|
|
||||||
export class Page extends ContentView implements dts.Page {
|
export class Page extends ContentView implements dts.Page {
|
||||||
public static backgroundSpanUnderStatusBarProperty = backgroundSpanUnderStatusBarProperty;
|
public static backgroundSpanUnderStatusBarProperty = backgroundSpanUnderStatusBarProperty;
|
||||||
public static actionBarHiddenProperty = actionBarHiddenProperty;
|
public static actionBarHiddenProperty = actionBarHiddenProperty;
|
||||||
|
public static iosSwipeBackNavigationEnabledProperty = iosSwipeBackNavigationEnabledProperty;
|
||||||
public static navigatingToEvent = "navigatingTo";
|
public static navigatingToEvent = "navigatingTo";
|
||||||
public static navigatedToEvent = "navigatedTo";
|
public static navigatedToEvent = "navigatedTo";
|
||||||
public static navigatingFromEvent = "navigatingFrom";
|
public static navigatingFromEvent = "navigatingFrom";
|
||||||
@ -97,10 +109,22 @@ export class Page extends ContentView implements dts.Page {
|
|||||||
this._setValue(Page.actionBarHiddenProperty, value);
|
this._setValue(Page.actionBarHiddenProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get iosSwipeBackNavigationEnabled(): boolean {
|
||||||
|
return this._getValue(Page.iosSwipeBackNavigationEnabledProperty);
|
||||||
|
}
|
||||||
|
|
||||||
|
set iosSwipeBackNavigationEnabled(value: boolean) {
|
||||||
|
this._setValue(Page.iosSwipeBackNavigationEnabledProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
public _updateActionBar(hidden: boolean) {
|
public _updateActionBar(hidden: boolean) {
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public _updateSwipeBackNavigationEnabled(hidden: boolean) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
get navigationContext(): any {
|
get navigationContext(): any {
|
||||||
return this._navigationContext;
|
return this._navigationContext;
|
||||||
}
|
}
|
||||||
@ -197,9 +221,9 @@ export class Page extends ContentView implements dts.Page {
|
|||||||
|
|
||||||
public onNavigatingTo(context: any, isBackNavigation: boolean, bindingContext?: any) {
|
public onNavigatingTo(context: any, isBackNavigation: boolean, bindingContext?: any) {
|
||||||
this._navigationContext = context;
|
this._navigationContext = context;
|
||||||
|
|
||||||
//https://github.com/NativeScript/NativeScript/issues/731
|
//https://github.com/NativeScript/NativeScript/issues/731
|
||||||
if (!isBackNavigation && !types.isNullOrUndefined(bindingContext)){
|
if (!isBackNavigation && !types.isNullOrUndefined(bindingContext)) {
|
||||||
this.bindingContext = bindingContext;
|
this.bindingContext = bindingContext;
|
||||||
}
|
}
|
||||||
this.notify(this.createNavigatedData(Page.navigatingToEvent, isBackNavigation));
|
this.notify(this.createNavigatedData(Page.navigatingToEvent, isBackNavigation));
|
||||||
|
10
tns-core-modules/ui/page/page.d.ts
vendored
10
tns-core-modules/ui/page/page.d.ts
vendored
@ -61,6 +61,11 @@ declare module "ui/page" {
|
|||||||
*/
|
*/
|
||||||
public static actionBarHiddenProperty: dependencyObservable.Property;
|
public static actionBarHiddenProperty: dependencyObservable.Property;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dependency property used to control if swipe back navigation in IOS is enabled. Default value: true
|
||||||
|
*/
|
||||||
|
public static isoSwipeBackNavigationEnabledProperty: dependencyObservable.Property;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* String value used when hooking to showingModally event.
|
* String value used when hooking to showingModally event.
|
||||||
*/
|
*/
|
||||||
@ -101,6 +106,11 @@ declare module "ui/page" {
|
|||||||
*/
|
*/
|
||||||
actionBarHidden: boolean;
|
actionBarHidden: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to control if swipe back navigation in IOS is enabled. Default value: true
|
||||||
|
*/
|
||||||
|
iosSwipeBackNavigationEnabled: boolean;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A valid css string which will be applied for all nested UI components (based on css rules).
|
* A valid css string which will be applied for all nested UI components (based on css rules).
|
||||||
*/
|
*/
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import pageCommon = require("./page-common");
|
import pageCommon = require("./page-common");
|
||||||
import {View} from "ui/core/view";
|
import { View } from "ui/core/view";
|
||||||
import trace = require("trace");
|
import trace = require("trace");
|
||||||
import uiUtils = require("ui/utils");
|
import uiUtils = require("ui/utils");
|
||||||
import {device} from "platform";
|
import { device } from "platform";
|
||||||
import {DeviceType} from "ui/enums";
|
import { DeviceType } from "ui/enums";
|
||||||
|
|
||||||
import * as utils from "utils/utils";
|
import * as utils from "utils/utils";
|
||||||
import getter = utils.ios.getter;
|
import getter = utils.ios.getter;
|
||||||
@ -216,7 +216,12 @@ class UIViewControllerImpl extends UIViewController {
|
|||||||
frame.ios.controller.delegate = this[DELEGATE];
|
frame.ios.controller.delegate = this[DELEGATE];
|
||||||
|
|
||||||
// Workaround for disabled backswipe on second custom native transition
|
// Workaround for disabled backswipe on second custom native transition
|
||||||
this.navigationController.interactivePopGestureRecognizer.delegate = this.navigationController;
|
if (frame.canGoBack()) {
|
||||||
|
this.navigationController.interactivePopGestureRecognizer.delegate = this.navigationController;
|
||||||
|
this.navigationController.interactivePopGestureRecognizer.enabled = page.iosSwipeBackNavigationEnabled;
|
||||||
|
} else {
|
||||||
|
this.navigationController.interactivePopGestureRecognizer.enabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
frame._processNavigationQueue(page);
|
frame._processNavigationQueue(page);
|
||||||
}
|
}
|
||||||
@ -424,6 +429,15 @@ export class Page extends pageCommon.Page {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public _updateSwipeBackNavigationEnabled(enabled: boolean) {
|
||||||
|
const navController = this._ios.navigationController;
|
||||||
|
if (this.frame && navController && navController.interactivePopGestureRecognizer) {
|
||||||
|
// Make sure we don't set true if cannot go back
|
||||||
|
enabled = enabled && this.frame.canGoBack();
|
||||||
|
navController.interactivePopGestureRecognizer.enabled = enabled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number) {
|
public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number) {
|
||||||
let width = utils.layout.getMeasureSpecSize(widthMeasureSpec);
|
let width = utils.layout.getMeasureSpecSize(widthMeasureSpec);
|
||||||
let widthMode = utils.layout.getMeasureSpecMode(widthMeasureSpec);
|
let widthMode = utils.layout.getMeasureSpecMode(widthMeasureSpec);
|
||||||
|
Reference in New Issue
Block a user