简体   繁体   中英

Overlapping UITextView when add text to UITextView

I created UIViewController in Storyboard and added tableview as a Subview . Its working fine. In that tableview I added cells programatically and each cell contains UITextFields or UITextView . UITextFields are working fine. But UITextViews have some troubles. EX: When I add text to UITextView then bellow UITextViews are overlapped. why is that ? I tried to sort out whole day. But still I couldn't. :(

    case cellResponseNote:
        cell = [tableView.tableView dequeueReusableCellWithIdentifier:CellIdentifierResponseNote];

        if (!cell) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifierResponseNote];
             cell.frame = CGRectMake(0, 0, cell.frame.size.width, cellNotesHeight);
            //cell.frame = CGRectMake(0, 0, cell.frame.size.width, cellNotesHeight);
            if (!self.txtVwResponseNote) {
              // self.txtVwResponseNote = [[UITextView alloc] initWithFrame:cell.frame];
                self.txtVwResponseNote = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, cellNotesHeight)];
                [self.txtVwResponseNote setScrollEnabled:NO];
                [self.txtVwResponseNote setAutoresizingMask:UIViewAutoresizingNone];
                [self.txtVwResponseNote setDelegate:self];

                [self.txtVwResponseNote setFont:[UIFont systemFontOfSize:14]];
                [self.txtVwResponseNote setInputAccessoryView:self.keyboardToolbar];
                [self setupMailData:indexPath.row];
            }
        }
        self.txtVwResponseNote.editable = !(self.isMailForReview);
       // [cell.contentView addSubview:self.txtVwResponseNote];
        [cell addSubview:self.txtVwResponseNote];
        contentSubview = self.txtVwResponseNote;

在此处输入图片说明

In this image bottom You can see three cells. ( bellow Footer) When I add text value for top text view. Then overlap the next text view. Bellow image you can see only two textviews. Bottom text view is not showing.

在此处输入图片说明

So what should I do ?

First of all as an answer try setting the height of the cell by following method.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
   case cellResponseNote:
        return cellNotesHeight;
   default:
        return defaultHeight;
}

Also I recommend you not to share the textview property. Instead try modifying your code like this and see whether your code works.

case cellResponseNote:
    cell = [tableView.tableView dequeueReusableCellWithIdentifier:CellIdentifierResponseNote];
    UITextView *txtVwResponseNote = nil;
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifierResponseNote];
         cell.frame = CGRectMake(0, 0, cell.frame.size.width, cellNotesHeight);
        //cell.frame = CGRectMake(0, 0, cell.frame.size.width, cellNotesHeight);
        //if (!self.txtVwResponseNote) {
          // self.txtVwResponseNote = [[UITextView alloc] initWithFrame:cell.frame];
            txtVwResponseNote = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, cellNotesHeight)];
            [txtVwResponseNote setScrollEnabled:NO];
            [txtVwResponseNote setAutoresizingMask:UIViewAutoresizingNone];
            [txtVwResponseNote setDelegate:self];

            [txtVwResponseNote setFont:[UIFont systemFontOfSize:14]];
            [txtVwResponseNote setInputAccessoryView:self.keyboardToolbar];
            [txtVwResponseNote setTag:100];
        //}
    } else {
        txtVwResponseNote = (UITextView *)[cell viewWithTag:100]
    }

    [self setupMailData:indexPath.row];
    txtVwResponseNote.editable = !(self.isMailForReview);
   // [cell.contentView addSubview:txtVwResponseNote];
    [cell addSubview:self.txtVwResponseNote];
    contentSubview = self.txtVwResponseNote;

It gets repeated because you added it to the cell as a subview, and then reuse the cell. Add it as a accessoryView of the cell instead, and set it to nil for the cell's that dont need it.

cell.accessoryView = self.txtVwResponseNote;

And in all other cells, set accessoryView to nil.

cell.accessoryView = nil;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM