Células do iPhone TableView com TextView personalizado - Get TextView Referência
-
22-09-2019 - |
Pergunta
Eu tenho uma View Uitable com 15 células, cada uma com uma caixa de texto separada. Eu implementei o UITextViewDelegate e sou capaz de receber dados de textwiew alterações usando o textViewDidChange (etc). Mas ainda tenho um grande problema, como sei qual o TextView enviou isso (ou seja, em qual célula foi a visualização de texto alterada?)
É interessante ter muito trabalho, mas não sabe exatamente de onde vem.
Um monte de código está disponível, se necessário.
Atenciosamente @Norskben
Código
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
//Big Text Box
UITextView *detailLabel = [[UITextView alloc] initWithFrame:CGRectMake(30, 80, CONST_Cell_width, 150)];
detailLabel.tag = 20;
[cell.contentView addSubview:detailLabel];
}
UITextView * detailLabel = (UITextView *) [cell.contentView viewWithTag:20];
Solução
Você pode atribuir tags (números inteiros) às diferentes visualizações e consultar o número da tag para ver qual visualização chamada Método. Procure a propriedade TAG na visualização:
tag
The receiver’s tag, an integer that you can use to identify view objects in your application.
@property(nonatomic) NSInteger tag
Outras dicas
Não na minha máquina de desenvolvimento, mas quando você cria o UITEXTVIEW, poderá atribuir uma tag. Eu acho que é [MyTextView Settag: x]; onde x é um número inteiro.
Então, no uso do TextViewDidChangeif (textview.tag == x) {
//do something
} else if (textview.tag == y) {
//do something else and so on
}
Espero que isso ajude um pouco.
As visualizações de texto passam uma referência a si mesmas em todos os métodos delegados para que você saiba qual o enviou. Para fazer uma conexão com a célula, eu definiria cada visualização de texto tag
propriedade para um valor diferente que corresponde à linha da célula em que está.
Aqui está uma pergunta importante: suas caixas de texto são estáticas ou elas podem mudar com o tempo? Se eles não mudarem (o usuário não pode alterar o número de células ou adicionar mais posterior), você poderá declarar um novo campo de texto para cada célula. Eu tenho algo semelhante em meus aplicativos. Eu tenho duas caixas de texto e, dependendo de qual campo de texto está atualmente ativo, o delegado faz algo diferente.
Declare campos de texto separados em seu cabeçalho
UITextField *textField1;
UITextField *textField2;
UITextField *textField3;
No método delegado, use os blocos de instrução para descobrir qual campo de texto está mudando:
if (textField == textField1) {
//do something
} else if (textField == myTextField2) {
//something else
}
Observe que isso realmente funciona apenas se sua visão for estática.
Espero que isto ajude
Tenha um ótimo dia
Quando você está pesquisando as células do UitableView para a fonte de evento UITextView, apenas itera sobre as células que o usuário pode ver no momento. Isso pode ser obtido usando o seguinte método uitableView:
- (NSArray *)visibleCells