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];
Foi útil?

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

Veja aqui

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top