Yeah, one thing you need to do is get the key window’s presentedViewController. 
 You can do this from the shared applicationDelegate.  Create a standalone 
class that gets UIApplication.shared().keywindow.presentedViewController.  
Think of that as self.  And then use that to present the alert.  Add a weak 
reference back to whichever object you need to do stuff when buttons are 
pressed in that alert.

Hope this helps.

> On Oct 16, 2019, at 6:00 PM, Doug Hardie via Cocoa-dev 
> <cocoa-dev@lists.apple.com> wrote:
> 
> I finally got some time to get back to this again.  The extension does a lot 
> of what I need.  It works great if it is called from any UIViewController.  
> However, if I call it from a function that is not in a view controller then 
> Swift says notificationAlert is not defined.  There is another side effect 
> that is more problematic, When the alert is displayed, I also get the message:
> 
> popViewControllerAnimated: called on <UINavigationController 0x7fc376813c00> 
> while an existing transition or presentation is occurring; the navigation 
> stack will not be updated.
> 
> Generally these alerts are used when a user tries to enter a view controller 
> where the prerequisite data has not been provided.  I wanted the alert to 
> display and then go back to the previous view controller.  I suspect that I 
> will need to use completions in the notificationAlert function to do that 
> rather than just following the call with the stack pop.
> 
> -- Doug
> 
>> On 9 October 2019, at 07:40, davel...@mac.com wrote:
>> 
>> I'm by no means an expert but if I understand what you're trying to do, I 
>> think the approach I would take is to make an extension on UIViewController:
>> 
>> extension UIViewController {
>>   func notificationAlert(_ msg1: String, _ msg2: String) {
>> 
>>       // create the UIAlertAlertController
>>       // and then do as David Duncan said and do:
>>       self.present(<alert controller>, animated: <true/false> completion: …)
>>   }
>> }
>> 
>> Now all your UIViewController subclasses can call that method (and because 
>> it's a method, they have access to self which is a subclass of 
>> UIViewController).
>> 
>> HTH,
>> Dave
>> 
>> 
>>> On Sep 30, 2019, at 11:27 PM, Doug Hardie via Cocoa-dev 
>>> <cocoa-dev@lists.apple.com> wrote:
>>> 
>>> I tried that and swift complains that self is not defined.  This is not in 
>>> a view controller but a stand alone function used in many view controllers. 
>>>  Generally it is used during a segue, but I added one in a view controller 
>>> to a button action, not part of a segue and it dismissed the alert also.  
>>> 
>>> -- Doug
>>> 
>>>> On 30 September 2019, at 19:48, David Duncan <david.dun...@apple.com> 
>>>> wrote:
>>>> 
>>>> Instead of creating a new window and a root view controller in order to 
>>>> present your alert, just use (assuming self is a UIViewController) 
>>>> self.present(<alert controller>, animated: <true/false> completion: …)
>>>> 
>>>>> On Sep 30, 2019, at 5:48 PM, Doug Hardie <bc...@lafn.org> wrote:
>>>>> 
>>>>> Not sure how to do that.  It's not in any view controller as it is used 
>>>>> in virtually all of the various view controllers.  That's why I wanted it 
>>>>> as a function.
>>>>> 
>>>>> -- Doug
>>>>> 
>>>>>> On 30 September 2019, at 14:44, David Duncan <david.dun...@apple.com> 
>>>>>> wrote:
>>>>>> 
>>>>>> What happens if you present it over your normal view controller 
>>>>>> hierarchy instead of using another window?
>>>>>> 
>>>>>> Has your application adopted UIWindowScene?
>>>>>> 
>>>>>>> On Sep 30, 2019, at 5:36 PM, Doug Hardie via Cocoa-dev 
>>>>>>> <cocoa-dev@lists.apple.com> wrote:
>>>>>>> 
>>>>>>> I have some code that presents an alert to the user with information 
>>>>>>> they need, and an OK button to clear it.  It works fine in the previous 
>>>>>>> Xcode versions.  However, after upgrading to 11, it now displays the 
>>>>>>> alert and then immediately clears it.  This happens both in the 
>>>>>>> simulator and on a real device.  I have played around with the code and 
>>>>>>> can't figure out how to make it leave the alert on the screen.  This is 
>>>>>>> in Swift.  It is a function that is called from numerous places in the 
>>>>>>> app.
>>>>>>> 
>>>>>>> func NotificationAlert (_ msg1: String, _ msg2: String) {
>>>>>>> let ErrorAlert = UIAlertController(title: msg1, message: msg2, 
>>>>>>> preferredStyle: .alert)
>>>>>>> let dismiss = UIAlertAction(title: "Ok", style: .default, handler: nil)
>>>>>>> ErrorAlert.addAction(dismiss)
>>>>>>> ErrorAlert.presentInOwnWindow(animated: true, completion: nil)
>>>>>>> }
>>>>>>> 
>>>>>>> extension UIAlertController {
>>>>>>> func presentInOwnWindow(animated: Bool, completion: (() -> Void)?) {
>>>>>>>  let alertWindow = UIWindow(frame: UIScreen.main.bounds)
>>>>>>>  alertWindow.rootViewController = UIViewController()
>>>>>>>  alertWindow.windowLevel = UIWindow.Level.alert + 1;
>>>>>>>  alertWindow.makeKeyAndVisible()
>>>>>>>  alertWindow.rootViewController?.present(self, animated: animated, 
>>>>>>> completion: completion)
>>>>>>> }
>>>>>>> }
>>>>>>> 
>>>>>>> 
>>>>>>> -- Doug
>>>>>>> 
>>>>>>> _______________________________________________
>>>>>>> 
>>>>>>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>>>>>>> 
>>>>>>> Please do not post admin requests or moderator comments to the list.
>>>>>>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>>>>>> 
>>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>> https://lists.apple.com/mailman/options/cocoa-dev/david.duncan%40apple.com
>>>>>>> 
>>>>>>> This email sent to david.dun...@apple.com
>>>>>> 
>>>>> 
>>>> 
>>> 
>>> _______________________________________________
>>> 
>>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>>> 
>>> Please do not post admin requests or moderator comments to the list.
>>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>> 
>>> Help/Unsubscribe/Update your Subscription:
>>> https://lists.apple.com/mailman/options/cocoa-dev/davelist%40mac.com
>>> 
>>> This email sent to davel...@mac.com
>> 
> 
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
> 
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
> 
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/cocoa-dev/zav%40mac.com
> 
> This email sent to z...@mac.com

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to