NativeScript / ios-jsc

NativeScript for iOS using JavaScriptCore
http://docs.nativescript.org/runtimes/ios
Apache License 2.0
298 stars 59 forks source link

Add setModalInPresentation method for UINavigationController #1228

Open jdnichollsc opened 4 years ago

jdnichollsc commented 4 years ago

I'm trying to call this method from a plugin but it throws an exception:

const safariHackVC = UINavigationController.alloc().initWithRootViewController(self.safariVC);
safariHackVC.presentationController.delegate = self;
if (ios.MajorVersion >= 13) {
  safariHackVC['setModalInPresentation'](true); //throws an exception
}

Any help is really appreciated 👍

jdnichollsc commented 4 years ago

Maybe this property is related with that new method https://developer.apple.com/documentation/uikit/uiviewcontroller/3229894-modalinpresentation?language=objc Check some examples:

Thanks in advance! :)

mbektchiev commented 4 years ago

Hi @jdnichollsc, you are correct. The native Objective-C code that you've found directly calls the setter function of the property. In NativeScript however, the setter is not exposed and what you need to do is use the property itself like this: safariHackVC.modalInPresentation = true;

jdnichollsc commented 4 years ago

Yes sir, in the meantime I'm using that property but it looks not working as expected (I can close the modal with a swipe back gesture) https://github.com/proyecto26/nativescript-inappbrowser/blob/master/src/InAppBrowser.ios.ts#L138

mbektchiev commented 4 years ago

To see whether the problem is with the iOS runtime and the setter, I can suggest that you log the property before and after setting it. I believe that it should be correctly assigned.

Are you sure that the swipe back gesture should be disabled with modalInPresentation? From its description (When you set it to YES, UIKit ignores events outside the view controller's bounds and prevents the interactive dismissal of the view controller while it is onscreen.) I'm not quite sure I'd anticipate this...