Ich würde sehr empfehlen, UIAlertView
nicht zu verwenden.
Zuerst wird es in iOS9 veraltet
Second es ein wirklich ist messedUIView
. Apple unterstützt das Unterklassifizieren nicht und die Dinge gehen wirklich seitwärts, wenn Sie versuchen, ResignFirstResponder
zu empfangen, damit Sie Ereignisse empfangen können. Zusammen mit einer Reihe von anderen Dingen, die seltsam sind, kein Wunder, dass Apple es missbilligte.
Verwenden UIAlertController
stattdessen es in iOS8/10.09 verfügbar ist und verhält sich wie eine richtige UIViewController
und sieht aus wie die alten Warnungen, wenn mit UIAlertControllerStyle.Alert
Stil verwendet, und Sie werden keine Probleme mit MotionBegan/MotionEnded
haben, wenn es zu benutzen.
So Sie entweder MotionBegan/MotionEnded
auf jedem UIViewController
außer Kraft setzen können:
public override void MotionBegan(UIEventSubtype motion, UIEvent evt)
{
Console.WriteLine("MotionBegin");
base.MotionBegan(motion, evt);
}
public override void MotionEnded(UIEventSubtype motion, UIEvent evt)
{
Console.WriteLine("MotionEnded");
base.MotionEnded(motion, evt);
}
Oder erstellen Sie Ihre eigenen UIWindow Unterklasse und und somit erhalten Sie global motion events (man kann nur schreiben (PostNotificationName
) über Benachrichtigungszentrale, wenn andere Bereiche Ihrer App auf Bewegungsereignisse reagieren müssen
public class ShakeWindow : UIWindow
{
public ShakeWindow() : base() { }
public ShakeWindow(IntPtr handle) : base(handle) { }
public override void MotionBegan(UIEventSubtype motion, UIEvent evt)
{
Console.WriteLine("Window MotionBegin");
NSNotificationCenter.DefaultCenter.PostNotificationName("ShakeMe", this);
base.MotionBegan(motion, evt);
}
public override void MotionEnded(UIEventSubtype motion, UIEvent evt)
{
Console.WriteLine("Window MotionEnded");
base.MotionEnded(motion, evt);
}
}
UIAlertController
Beispiel mit NSNotificationCenter
:
var button2 = new UIButton(UIButtonType.RoundedRect);
button2.SetTitle("Alert 2", UIControlState.Normal);
button2.Frame = new CGRect(20, 60, 100, 40);
button2.TouchUpInside += (object sender, EventArgs e) =>
{
var alert2 = UIAlertController.Create("StackOverflow", "Shake me now", UIAlertControllerStyle.Alert);
NSNotificationCenter.DefaultCenter.AddObserver(new NSString("ShakeMe"), (obj) =>
{
alert2?.DismissViewController(true, null);
});
alert2.AddAction(UIAlertAction.Create("Ok", UIAlertActionStyle.Default, (UIAlertAction obj) =>
{
alert2.DismissViewController(true, null);
}));
PresentViewControllerAsync(alert2, true);
};
Add(button2);
Großartig! Danke für die schnelle Antwort. Ich werde stattdessen einen UIAlertController verwenden. Der Grund für die Verwendung von UIAlertViews ist, dass einige der Benutzer noch über iOS 7 verfügen und daher UIAlerViewControllers nicht anzeigen können. Da diese Screenshot-Funktion nur für interne Testzwecke gedacht ist, überprüfe ich einfach die OS-Version bei der Anzeige von Alarmen. Sollte sowieso schon UIAlertViewControllers implementiert haben :-) – stonecompass
@Hypo: Wenn du auf iOS7 (+) Alerts unterstützen musst, würde ich einen benutzerdefinierten 'UIViewController' erstellen und den Alert-Look erzeugen, nicht wirklich viel dazu ... viel Glück und glücklicher Xammie Kodierung ... – SushiHangover
Wahr, und danke! – stonecompass