проблема фокуса iphone UIAlertView - PullRequest
0 голосов
/ 20 ноября 2010

Я использую простое оповещение для отображения длинного сообщения и обрабатываю оповещение следующим образом:


bool        hold_alert = true;
UIAlertView * malert = [[UIAlertView alloc]....create the alert
[malert show];
while(hold_alert)
{//hold the application focus on the alert, when alert triggers the function with "clickedButtonAtIndex" i set hold_alert to false
    CFRunLoopRunInMode(kCFRunLoopDefaultMode,0.05,false);
}
[malert removeFromSuperView];
[my_window becomeFirstResponder];
... release alert and stuff , and carry on...

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

Спасибо, Raxvan.

1 Ответ

1 голос
/ 20 ноября 2010

Немного неясно, чего вы хотите достичь с помощью функции runloop ...

Но, может быть,

-(void)presentAlert
{
UIAlertView * malert = UIAlertView *aview = [[[UIAlertView alloc] initWithTitle:@"Blah" message:@"blah blah" cancelButtonTitle:@"OK" delegate:self otherButtonTitles:nil] autorelease];                                                                                                                                                                                                       
[malert show];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex) { foo }
}

Это то, что вы хотите, поскольку остальная часть управления сделана дляВы относительно памяти и взглядов.Нет необходимости явно фокусировать внимание на предупреждении.

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

    -(void)presentAlert
    {
    UIAlertView * malert = UIAlertView *aview = [[[UIAlertView alloc] initWithTitle:@"Blah" message:@"blah blah" cancelButtonTitle:@"OK" delegate:self otherButtonTitles:nil] autorelease];                                                                                                                                                                                                       
    [malert show];
    iTimer = [[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(doStuff:) userInfo:nil repeats:YES] retain];

    }

    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
    {
    [iTimer invalidate];
    [iTimer release];   
    if (buttonIndex) { //foo }
    }

    -(void)doStuff:(NSTimer *)aTimer
   {
       //bar
   }
...