2010-02-08 3 views
0

У меня есть некоторые деструктивные операции, которые нуждаются в подтверждении, и я использую UIActionSheet.Открытие UIActivityIndicatorView после UIActionSheet

Внутри clickedButtonAtIndex Я запускаю несколько операций, требующих UIActivityIndicatorView.

Проблема в том, что я не вижу UIActivityIndicatorView до закрытия UIActionSheet, и это происходит, когда операция завершена.

Могу ли я принудительно закрыть лист UIActionSheet, даже если пользователь нажал несколько кнопок, и их нажалButtonAtIndex делегат был уволен?

В псевдокоде:

  • Пользователь хочет сделать некоторую деструктивную операцию
  • подтверждения запроса с UIActionSheet
  • Пользователь говорит ДА
  • Делегат clickedButtonAtIndex пожаров и вызывает lenghtly операции
  • Эта операция, первая вещь, которая делает это открытие UIActivityIndicatorView, но поскольку UIActionSheet активен, я не могу видеть до конца ...

спасибо,

г.

ответ

1

Вы можете позвонить

CFRunLoopRunInMode(UITrackingRunLoopMode, 0.1, true); 

, чтобы элементы пользовательского интерфейса обновления до начала вашего длительного расчета. Кроме того, вы можете использовать

-(void)doLengthyOperation { 
    show_activity_indicator_view(); 
    [self performSelector:@selector(doRealLengthyOperation) withObject:nil afterDelay:0.1]; 
} 
-(void)doRealLengthyOperation { 
    // do the real lengthy operations. 
} 
+0

Это не работает: CFRunLoopRunInMode (UITrackingRunLoopMode, 0,1, правда); Я собираюсь o попробовать другой подход ... спасибо, r. – mongeta

+0

@mongeta: Возможно, вам нужно запустить режим 'kCFRunLoopModeDefault' вместо' UITrackingRunLoopMode'. Другой маршрут лучше, хотя. – kennytm

+0

Спасибо, наконец, хорошая комбинация обоих решений решила мою проблему. :-) – mongeta