Pergunta

Eu tenho um problema. Parte do meu aplicativo exige que o texto seja mostrado em uma tabela. O texto precisa ser selecionável/copável (mas não editável) e quaisquer URLs no texto precisam ser destacados e, quando tocado, permita -me pegar esse URL e abrir meu navegador incorporado.

Eu já vi algumas soluções que resolvem um desses problemas, mas não ambos.

Solução 1: Icon Factory's Iftweetlabel

A primeira solução que tentei foi usar a classe iftweetlabel possibilitada pela Icon Factory e usada no Twitterrific.

Embora essa solução permita que os links (ou qualquer coisa que você possa encontrar com um regex) sejam detectados para serem tratados caso a caso, ela não permite selecionar e copiar.

Há também um problema em que, se um URL for longo o suficiente para ser embrulhado, o botão que a classe se sobrepõe acima do URL para torná -lo interativo não pode envolver e desligar a tela, parecendo muito estranho.

Solução 2: Use iftweetlabel e manuseie a cópia manualmente

A segunda coisa que tentei foi manter o Iftweetlabel no lugar para lidar com os links, mas implementar a cópia usando um gesto de longo prazo, como como o aplicativo SMS lida com isso. Era apenas funcionar, mas não permite a seleção arbitrária de texto, o texto inteiro é copiado ou nenhum é copiado ... bastante preto e branco.

Solução 3: UITextView

Minha terceira tentativa foi adicionar um UITextView como uma subjecução da célula da tabela.

A única coisa que isso não resolve é o fato de que os URLs detectados não podem ser tratados por mim. A visualização de texto usa UIApplication's openURL: Método que sai do meu aplicativo e lançou o Safari.

Além disso, como a visualização da tabela pode ficar bastante grande, o número de UITextViewS Adicionado como subviews causa um arrasto perceptível de rolar por toda a tabela, especialmente nos dispositivos da ERA do iPhone 3G (devido à criação, layout, composição sempre que uma célula é rolada na tela, etc.).

Então, minha pergunta a tudo o que você conhece, o que posso fazer?

Faria a UIWebView ser a melhor opção? Além de um arrasto de desempenho, acho que uma WebView resolveria todos os problemas acima e, se bem me lembro, nos 2,0 dias, a documentação da Apple recomendou visualizações da Web onde foram necessários hiperlinks de formatação de texto.

Alguém pode pensar em uma maneira de conseguir isso sem um arrasto de desempenho?

Muito obrigado antecipadamente a todos que podem ajudar.

Foi útil?

Solução

Assim que eu apertei o botão Enviar, uma nova idéia me atingiu.

Eu estava tão preocupado em ter URLs alinhado com texto e interativo que não considerava que talvez não seja a melhor solução.

Tenho certeza de que para alcançar esse tipo de comportamento, um UIWebView é a melhor escolha, independentemente dos problemas de desempenho.

No entanto, talvez uma melhor experiência / interação do usuário seja não destacar os URLs inline, mas reuni -los em uma matriz nos bastidores e apresentar um botão de divulgação como visualização acessória da célula?

Então, para seleção e copiar texto, eu poderia usar o UITextView Com os detectores de dados desligados e não se preocupam com os links enviados para o Safari e fechando meu aplicativo.

Quando o botão de divulgação é tocado, o usuário pode ser levado para o URL encontrado no texto, ou se mais de uma URL for encontrada, apresente ao usuário uma visualização do seletor para escolher a que ir.

Quaisquer pensamentos/críticas a essa idéia são bem -vindos.

Outras dicas

Você pode impedir que um campo de texto seja editado substituindo os métodos UITextfield Delegate, de modo que eles não apliquem nenhuma edição. Isso deixa o campo selecionado e copiado, mas evita a alteração.

Uma pergunta melhor a fazer é: você realmente precisa exibir o próprio URL real? Você pode se safar apenas com um nome de página/localização, apenas o prefixo servidor.host.domain ou alguma outra representação condensada do URL? Eu não acho que ninguém o que tente ler um URL longo na tela restrita de um celular.

Se você precisar exibir todo o URL, acho que uma visualização detalhada é o caminho a seguir.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top