Problema do iOS7 com o controle de visualização modal segue da seleção de célula personalizada
Depois de mais investigações, achei que seria melhor repassar a questão com mais informações sobre a questão específica.
Esse problema parece ocorrer apenas no iOS7. Eu testei no iOS6 e isso funciona sem problemas.
- Setup A configuração é que você tem umUIViewController
(primeiro VC, por exemplo), isso contém um tableView e é o datasource / delegate. Quando a célula em tableView é selecionada / tocada, você executa um segue para o Segundo Controlador de Visualização (isso pode estar vazio por enquanto).
A questão é que o segue não ocorre imediatamente. Dentro de um segundo como esperado. Não há dados sendo passados no segue ou qualquer coisa sendo carregada no segundo controlador de visualização, portanto você espera que seja instantâneo.
Às vezes, isso funcionará bem sem problemas. Outras vezes, você clicará na célula e nada acontecerá.
Tendência Noticiada O que eu notei é que quando o 'problema' ocorre. O simulador / dispositivo aguardará até o próximo minuto começar a forçar a carga do controlador de exibição modal. OU Quando o problema ocorrer, você poderá clicar / tocar novamente em qualquer lugar na tela do dispositivo para "forçar" a carga.
O problema pode ser reproduzido em um novo projeto apenas com o básico. Eu tenhocarregou um exemplo de zip do projeto que inclui este.
Código adicional (se necessário)Eu tenho uma configuração de célula personalizada. Quando a célula é selecionada, eu faço o seguinte:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"%s",__PRETTY_FUNCTION__);
if (indexPath.section == 0) {
[self performSegueWithIdentifier:@"selectGameTurnDiff" sender:self];
}
}
Então eu tenho o seguinte no prepareForSegue:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
NSLog(@"%s",__PRETTY_FUNCTION__);
[super prepareForSegue:segue sender:sender];
}
Exploração madeireiraAqui estão alguns logs de exemplo para mostrar isso: Run 1
2013-10-09 23: 54: 09.855 App [14954: a0b] - [FirstViewController tableView: didSelectRowAtIndexPath:]
2013-10-09 23: 54: 09.857 App [14954: a0b] - [FirstViewController prepareForSegue: remetente:]
2013-10-09 23: 55: 00.004 App [14954: a0b] - [SecondViewController viewDidLoad]
2013-10-09 23: 55: 00.004 App [14954: a0b] - [SecondViewController viewWillAppear:]
2013-10-09 23: 55: 00.511 App [14954: a0b] - [SecondViewController viewDidAppear:]
Executar 2
2013-10-09 23: 56: 21.900 App [14954: a0b] - [FirstViewController tableView: didSelectRowAtIndexPath:]
2013-10-09 23: 56: 21.901 App [14954: a0b] - [FirstViewController prepareForSegue: remetente:]
2013-10-09 23: 57: 00.003 App [14954: a0b] - [SecondViewController viewDidLoad]
2013-10-09 23: 57: 00.003 App [14954: a0b] - [SecondViewController viewWillAppear:]
2013-10-09 23: 57: 00.508 App [14954: a0b] - [exibição de SecondViewControllerDidAppear:]
Executar 3
2013-10-09 23: 57: 43.387 App [14954: a0b] - [FirstViewController tableView: didSelectRowAtIndexPath:]
2013-10-09 23: 57: 43.388 App [14954: a0b] - [FirstViewController prepareForSegue: remetente:]
2013-10-09 23: 58: 00.004 App [14954: a0b] - [SecondViewController viewDidLoad]
2013-10-09 23: 58: 00.004 App [14954: a0b] - [Visualização do SecondViewControllerWillAppear:]
2013-10-09 23: 58: 00.510 App [14954: a0b] - [exibição do SecondViewControllerDidAppear:]