UITextField in UITableView cell is returning null

前端 未结 2 906
野性不改
野性不改 2021-01-15 04:23

I\'ve been banging my head against the wall on this one for quite some time now. Any input or direction is greatly appreciated.

So the goal is the create a log in fo

2条回答
  •  再見小時候
    2021-01-15 04:55

    The textField variable (I assume it is an ivar in the class or a static global variable) is your main problem. You create a new text field each time you create a new cell, which is fine, but then you add it to a cell every time the cellForRowAtIndexPath method is called. Since cells are reused this will screw things up.

    Your code need to look something like this:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        static NSString *CellIdentifier = @"Cell";
        NSArray *listData =[self.tableContents objectForKey:[self.sortedKeys objectAtIndex:[indexPath section]]];
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
        if (cell == nil) {
                cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2                                                                                                   reuseIdentifier:CellIdentifier] autorelease];
    
                cell.selectionStyle = UITableViewCellSelectionStyleNone;
                cell.accessoryType = UITableViewCellAccessoryNone;
                cell.editing = YES;
    
                UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(120, 13, 375, 30)];
                textfield.tag = 1;
                textField.adjustsFontSizeToFitWidth = NO;
                textField.font = [UIFont fontWithName:@"Helvetica" size:14.0];
                textField.textColor = [UIColor darkGrayColor];
                textField.returnKeyType = UIReturnKeyDone;
                textField.backgroundColor = [UIColor clearColor];
                textField.autocorrectionType = UITextAutocorrectionTypeNo; 
                textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
                textField.textAlignment = UITextAlignmentLeft;
                textField.clearButtonMode = UITextFieldViewModeNever;
                textField.delegate = self;
                [textField setEnabled: YES];
    
                [cell.contentView addSubview:textField];
                [textField release];
        }
    
        UITextField *textField = (UITextField *) [cell.contentView viewWithTag:1];
    
        if ([indexPath section] == 0) {
                switch (indexPath.row) {
                        case 0:
                                textField.placeholder = @"Optional";
                                textField.secureTextEntry = NO;
                                textField.keyboardType = UIKeyboardTypeDefault;
                                break;
                        case 1:
                                textField.placeholder = @"";
                                textField.secureTextEntry = NO;
                                textField.keyboardType = UIKeyboardTypeDefault;
                                break;
                        case 2:
                                textField.placeholder = @"";
                                textField.secureTextEntry = NO;
                                textField.keyboardType = UIKeyboardTypeDefault;
                                break;
                        case 3:
                                textField.placeholder = @"";
                                textField.secureTextEntry = YES;
                                textField.keyboardType = UIKeyboardTypeDefault;
                                break;
                        case 4:
                                textField.placeholder = @"Optional";
                                textField.secureTextEntry = NO;
                                textField.keyboardType = UIKeyboardTypeDefault;
                                break;
                        case 5:
                                textField.placeholder = @"Optional";
                                textField.secureTextEntry = NO;
                                textField.keyboardType = UIKeyboardTypeNumberPad;
                                break;
                }               
        }
    
        textField.text = [listData objectAtIndex:indexPath.row];
    
        return cell;
    }
    

    Not sure this does exactly what you want but it should point you in the right direction.

提交回复
热议问题