Search code examples
tvos

TVOS: Issue with showing alert on tvOS Application


I am a beginner in tvOS app development. I am trying to show an alert when clicking a button in my tvOS application.

I tried the below code, but showing errors:

let alertController = UIAlertController(title: status, message: title, preferredStyle: .Alert) // 2
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in //3 
}
alertController.addAction(cancelAction)

let ok = UIAlertAction(title: "OK", style: .Default) { (action) in
} // 4
alertController.addAction(ok)

self.presentViewController(alertController, animated: true) { // 5
}

Screenshot:

enter image description here

Need any packages for solving these issues? I follow this blog for creating this sample project(Quiz Game App section).


Solution

  • Finally, I am able to show different types of alerts on my app using this sample project. Posting the code here:

    ViewController.cs

    partial void DisplayDestructiveAlert (Foundation.NSObject sender) {
        // User helper class to present alert
        AlertViewController.PresentDestructiveAlert("A Short Title is Best","The message should be a short, complete sentence.","Delete",this, (ok) => {
            Console.WriteLine("Destructive Alert: The user selected {0}",ok);
        });
    }
    
    partial void DisplayOkCancelAlert (Foundation.NSObject sender) {
        // User helper class to present alert
        AlertViewController.PresentOKCancelAlert("A Short Title is Best","The message should be a short, complete sentence.",this, (ok) => {
            Console.WriteLine("OK/Cancel Alert: The user selected {0}",ok);
        });
    }
    
    partial void DisplaySimpleAlert (Foundation.NSObject sender) {
        // User helper class to present alert
        AlertViewController.PresentOKAlert("A Short Title is Best","The message should be a short, complete sentence.",this);
    }
    
    partial void DisplayTextInputAlert (Foundation.NSObject sender) {
        // User helper class to present alert
        AlertViewController.PresentTextInputAlert("A Short Title is Best","The message should be a short, complete sentence.","placeholder", "", this, (ok, text) => {
            Console.WriteLine("Text Input Alert: The user selected {0} and entered `{1}`",ok,text);
        });
    }
    

    AlertViewController.cs

    #region Static Methods
    public static UIAlertController PresentOKAlert(string title, string description, UIViewController controller) {
        // No, inform the user that they must create a home first
        UIAlertController alert = UIAlertController.Create(title, description, UIAlertControllerStyle.Alert);
    
        // Configure the alert
        alert.AddAction(UIAlertAction.Create("OK",UIAlertActionStyle.Default,(action) => {}));
    
        // Display the alert
        controller.PresentViewController(alert,true,null);
    
        // Return created controller
        return alert;
    }
    
    public static UIAlertController PresentOKCancelAlert(string title, string description, UIViewController controller, AlertOKCancelDelegate action) {
        // No, inform the user that they must create a home first
        UIAlertController alert = UIAlertController.Create(title, description, UIAlertControllerStyle.Alert);
    
        // Add cancel button
        alert.AddAction(UIAlertAction.Create("Cancel",UIAlertActionStyle.Cancel,(actionCancel) => {
            // Any action?
            if (action!=null) {
                action(false);
            }
        }));
    
        // Add ok button
        alert.AddAction(UIAlertAction.Create("OK",UIAlertActionStyle.Default,(actionOK) => {
            // Any action?
            if (action!=null) {
                action(true);
            }
        }));
    
        // Display the alert
        controller.PresentViewController(alert,true,null);
    
        // Return created controller
        return alert;
    }
    
    public static UIAlertController PresentDestructiveAlert(string title, string description, string destructiveAction, UIViewController controller, AlertOKCancelDelegate action) {
        // No, inform the user that they must create a home first
        UIAlertController alert = UIAlertController.Create(title, description, UIAlertControllerStyle.Alert);
    
        // Add cancel button
        alert.AddAction(UIAlertAction.Create("Cancel",UIAlertActionStyle.Cancel,(actionCancel) => {
            // Any action?
            if (action!=null) {
                action(false);
            }
        }));
    
        // Add ok button
        alert.AddAction(UIAlertAction.Create(destructiveAction,UIAlertActionStyle.Destructive,(actionOK) => {
            // Any action?
            if (action!=null) {
                action(true);
            }
        }));
    
        // Display the alert
        controller.PresentViewController(alert,true,null);
    
        // Return created controller
        return alert;
    }
    
    public static UIAlertController PresentTextInputAlert(string title, string description, string placeholder, string text, UIViewController controller, AlertTextInputDelegate action) {
        // No, inform the user that they must create a home first
        UIAlertController alert = UIAlertController.Create(title, description, UIAlertControllerStyle.Alert);
        UITextField field = null;
    
        // Add and configure text field
        alert.AddTextField ((textField) => {
            // Save the field
            field = textField;
    
            // Initialize field
            field.Placeholder = placeholder;
            field.Text = text;
            field.AutocorrectionType = UITextAutocorrectionType.No;
            field.KeyboardType = UIKeyboardType.Default;
            field.ReturnKeyType = UIReturnKeyType.Done;
            field.ClearButtonMode = UITextFieldViewMode.WhileEditing;
    
        });
    
        // Add cancel button
        alert.AddAction(UIAlertAction.Create("Cancel",UIAlertActionStyle.Cancel,(actionCancel) => {
            // Any action?
            if (action!=null) {
                action(false,"");
            }
        }));
    
        // Add ok button
        alert.AddAction(UIAlertAction.Create("OK",UIAlertActionStyle.Default,(actionOK) => {
            // Any action?
            if (action!=null && field !=null) {
                action(true, field.Text);
            }
        }));
    
        // Display the alert
        controller.PresentViewController(alert,true,null);
    
        // Return created controller
        return alert;
    }
    #endregion
    
    #region Delegates
    public delegate void AlertOKCancelDelegate(bool OK);
    public delegate void AlertTextInputDelegate(bool OK, string text);
    #endregion