2013-09-04 11 views
6

jeśli spróbuję wyświetlić zablokowany AlertView w metodzie ViewDidAppear na iOS 7, nie będę mógł odrzucić AlertView. Brak zdarzeń dotyku dotrze do AlertView. Przycisk widoku zostanie podświetlony, ale nic się nie stanie. Jeśli uruchomię ten sam kod na iOS < 7, będzie działać poprawnie.Wyświetlanie zablokowanego UIAlertView w metodzie ViewDidAppear na iOS 7 z Xamarin.iOS nie działa

Oto przykładowy kod:

public override void ViewDidAppear(bool animated) 
    { 
     base.ViewDidAppear(animated); 

     var alert = new UIAlertView("Title", "Message", null, "OK"); 
     alert.Dismissed += (sender, args) => result = true; 
     alert.Show(); 

     while (!result) 
      NSRunLoop.Current.RunUntil(NSDate.FromTimeIntervalSinceNow(0.1)); 
    } 

Używam Xamarin.iOS Wersja 6.4.3.0 z Apple SDK 6.1. Mam te same problemy z alfa Xamarin.iOS 6.9.6.0 i Apple SDK 7.0.

Czy ktoś może mi powiedzieć, jaki to problem?

Dzięki za pomoc.

+0

iOS7 jest nadal objęty umową NDA, a Ty nie masz uprawnień do dyskusji na ten temat publicznie. –

+3

Wydano dzisiaj iOS7. Odpowiedź byłaby bardzo cenna, ponieważ mam ten sam problem ... – jbandi

Odpowiedz

-1

Należy dodać

alert.Clicked += AlertViewClick; 

i robić rzeczy w

private void AlertViewClick (object sender, UIButtonEventArgs ea) 
{ 
    //Stuff Here 
} 

i usunąć

while (!result) 
      NSRunLoop.Current.RunUntil(NSDate.FromTimeIntervalSinceNow(0.1)); 
2

To nie jest dobry pomysł, aby użyć NSRunLoop zablokować wykonanie UI, ale na pewno nie jest lepszy sposób robienia tego.

Możesz użyć wzoru async/await, aby poczekać, aż użytkownik naciśnie przycisk UIAlertView. Oto przykład, którego można użyć: https://gist.github.com/prashantvc/6725882

1

Zgodnie z this Apple developer forum thread, iOS 7 zawiera błąd, w którym delegat UIAlertView nigdy nie zostanie wywołany po uruchomieniu RunLoopa. Według jednej osoby może nadal działać na iPadzie. Możesz subskrybować aktualizacje wiadomości e-mail dla tego wątku na forum w przypadku znalezienia poprawki lub obejścia.

+0

Ładnie dostrzeżone, mam nadzieję, że poprawka pojawi się w nadchodzącym wydaniu na iOS. Książka kucharska iOS6 autorstwa Erica Sadun zawiera przepisy dotyczące implementacji ModalAlertDelegate: https://github.com/erica/iOS-6-Cookbook/blob/master/C03%20Alerts/02%20-%20Modal/ModalAlertDelegate.m Ten przepis nie działa już w iOS7, biednych programistów, którzy zastosowali przepis w swoich aplikacjach (tak jak ja). – jbandi

+0

Tak, wiele osób zrobiło to samo za pomocą Monotouch/Xamarin na podstawie tego przykładu C#: http://stackoverflow.com/questions/4248244/iphone-uialertview-modal/4807697#4807697 –