2010-09-01 4 views
3

Следует ли повторять использование экземпляров UIAlertView, когда это возможно?MonoTouch - повторное использование UIAlertVIew?

Или обертывают ли они в используемом блоке наилучшую практику?

  • Для одной ситуации, я создал класс (покадрово) MessageBox (только как WinForms или WPF). В основном я использую для удобства.
  • Другая ситуация - пользовательский UIAlertView, который я подклассифицировал, что имеет более продвинутый макет. Я подключаю событие «Увольнение», чтобы выполнить некоторую работу по закрытию.

Будет ли любая из этих ситуаций использовать другой подход?

ответ

2

Я не думаю, что есть какие-либо проблемы с этим использованием в блоке использования - вы можете захотеть абстрагироваться от обработчика, чтобы у вас не было диалогового окна с делегацией по всему, что делает то же самое.

затем снова LoadingHUDView является хорошим примером необходимости кодировать из функциональных возможностей для более продвинутых вещей ...

, но в любом случае - если вы повторно использовать один и тот же объект, но на самом деле меняется его каждый раз - там ; S не может принести большую пользу IMO

+0

Я согласен с @CVista .. UIAlertView настолько легкий, что есть небольшой выигрыш для сохранения объекта для последующего использования .. Обычно я использую его внутри блока, и это достаточно хорошо. –

2

Вот как вы можете сделать свой UIAlertView модальность:

чтобы сделать это, что вы можете сделать, это запустить MainLoop вручную. Мне не удалось остановить mainloop напрямую, поэтому вместо этого я запустил mainloop на 0,5 секунды и дождитесь ответа пользователя.

Следующая функция показывает, как можно реализовать модальный запрос с вышеуказанным подходом:

int WaitForClick() 
{ 
    int clicked = -1; 
    var x = new UIAlertView ("Title", "Message", null, "Cancel", "OK", "Perhaps"); 
    x.Show(); 
    bool done = false; 
    x.Clicked += (sender, buttonArgs) => { 
     Console.WriteLine ("User clicked on {0}", buttonArgs.ButtonIndex); 
    clicked = buttonArgs.ButtonIndex; 
    };  
    while (clicked == -1){ 
     NSRunLoop.Current.RunUntil (NSDate.FromTimeIntervalSinceNow (0.5)); 
     Console.WriteLine ("Waiting for another 0.5 seconds"); 
    } 

    Console.WriteLine ("The user clicked {0}", clicked); 
    return clicked; 
} 
+0

Было бы лучше использовать ManualResetEvent в сочетании с анонимным методом? в то время как (правда) со сном мне кажется довольно плохо. Также кажется вне темы из вопроса, который, если повторное использование UIAlertView стоит того или нет. – jonathanpeppers

+0

Вам нужно перекачать события, поэтому вы должны позвонить в NSRunLoop.Current.Run или RunUntil. Но метод iOS от выхода из метода Run не работает, а именно, что насос должен использоваться с таймаутом. Ваш подход будет просто блокировать и даже не обновлять или рисовать. Попробуй сам. –

+0

Вы правы, b/c это работает в потоке пользовательского интерфейса. Сначала это выглядело как (плохое), хотя (true) Application.DoEvents(), что я видел, как люди делают это в WinForms. Отстой, что вы делаете это на iPhone, b/c нет ShowDialog(), который создаст вложенный насос сообщений. – jonathanpeppers

Смежные вопросы