开发者

iphone, UITextField in UITableView

I'm trying to add textfields in a tableview. I want a label and a textfield in every row except the last row. I want a switch at the last row. The problem is that the text fields are overlapping on the rest of the rows. I moved my textfield code inside the if(cell == nil) but that didn't work... here's my code

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *MyIdentifier = @"mainMenuIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
    [cell setSelectedBackgroundView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"highlightstrip.png"]]];


    if (tableView.tag == 1) {

        UILabel *lblName = [开发者_如何学运维[UILabel alloc] initWithFrame:CGRectMake(10, 10, 90, 20)];
        lblName.textAlignment = UITextAlignmentLeft;
        lblName.font = [UIFont boldSystemFontOfSize:14];
        lblName.backgroundColor = [UIColor clearColor];
        lblName.tag = 31;
        [cell.contentView addSubview:lblName];
        [lblName release];

    }

}

    if (tableView.tag == 1) {

        [(UILabel *) [cell viewWithTag:31] setText:[tableElements objectAtIndex:indexPath.row]];
// check if the last row
        if (indexPath.row == 10) {
            newsSwtich = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease];
            [newsSwtich addTarget:self action:@selector(switchToggled:) forControlEvents: UIControlEventTouchUpInside];
            cell.accessoryView = newsSwtich;
        }
        else {

                UITextField *tempTextField = [[UITextField alloc] initWithFrame:CGRectMake(100, 10, 200, 20)];
                tempTextField.delegate = self;
                //  tempTextField.placeholder = [tableElements objectAtIndex:indexPath.row];
                tempTextField.font = [UIFont fontWithName:@"Arial" size:14];
                tempTextField.textAlignment = UITextAlignmentLeft;
                tempTextField.tag = indexPath.row;
                tempTextField.autocorrectionType = UITextAutocorrectionTypeNo;  // no auto correction support
                tempTextField.keyboardType = UIKeyboardTypeDefault;  // type of the keyboard
                tempTextField.returnKeyType = UIReturnKeyDone;  // type of the return key
                tempTextField.clearButtonMode = UITextFieldViewModeWhileEditing;    // has a clear 'x' button to the right
                [cell.contentView addSubview:tempTextField];
                [tempTextField release];


            cell.accessoryView = UITableViewCellAccessoryNone;
        }


cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;

}

When I scroll up and down the text fields are overlapped , I mean after I enter the text in the first row and scroll down, I can see that textfield copied at the last row as well.


Cell reuse is causing the text fields to overlap. Each time the cell is being reused, you are adding a text field or a switch. These are piling up. You will need to remove the older subview which would either be the switch or the text field before adding one.


why you are using two tableviews just do this

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {                          
if(indexPath.row==[tableviewarray count]){
//dont add label or textfield
}
else{
// add label or textfield
}

}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜