0

プログラムでuitableviewcontroller内にuitextviewを作成しましたが、textviewを編集できません。これが私のテーブルレイアウトの概要です:

行1:UILabel

Row2:編集不可能なUITextview

Row3:UILabel

Row4:編集可能なUITextview

これが私がしていることです:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{ 
UILabel *label = nil;
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if(indexPath.row%2==0)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, 50)];
    [label setBackgroundColor:[self.cellBackgroundColor objectAtIndex:indexPath.row]];
    [label setText:[self.celltitle objectAtIndex:indexPath.row]];
    label.font=[UIFont fontWithName:[self.cellFontName objectAtIndex:indexPath.row] size:[[self.cellFontSize objectAtIndex:indexPath.row] integerValue]];

    label.textAlignment = NSTextAlignmentLeft;
    [[cell contentView] addSubview:label];
}
else{

    UITextView *messageBox= [[UITextView alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, 150)];
   cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    cell.userInteractionEnabled=YES;
    if(indexPath.row==3)
    {
       [messageBox setEditable:YES];
[messageBox setUserInteractionEnabled:YES];
        messageBox.delegate=self;
        messageBox.editable=YES;
    }
     [cell.contentView addSubview: messageBox];


}
return cell;}

また、ヘッダーファイルにtextviewdelegateを設定し、textviewはeditingメソッドを開始する必要がありますが、row4 textviewはまだ編集できません...何か助けがありますか?

4

4 に答える 4

2

messageBoxをsetEditableおよびsetUserInteractionEnabledにすることに加えて、UITextViewがネストされているため、UITableViewControllerでもこれらのプロパティが有効になっていることを確認する必要があります。

[tableView setUserInteractionEnabled:YES];
[cell setUserInteractionEnabled:YES];
[messageBox setEditable:YES];
[messageBox setUserInteractionEnabled:YES];

(*注:tableViewとTableViewCellはどちらもこの関数の名前が同じなので、そのコードを別の場所に配置しますが、念のため上に追加しました)

于 2013-02-14T13:24:14.133 に答える
1

これを試してみてください..それはあなたを助けるかもしれません..それは私のために働いています

 if(indexPath.row==3)
    {
        messageBox.delegate=self;
       [messageBox setEditable:YES];
       [messageBox setUserInteractionEnabled:YES];
        messageBox.editable=YES;
        [cell addSubview: messageBox];
    }
于 2013-02-14T13:15:59.733 に答える
0

私はあなたのコードを試しました..それは私のために働いています..以下の変更を参照してください

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  UILabel *label = nil;
  static NSString *CellIdentifier = @"Cell";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

  if (nil == cell)
  {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];


    if(indexPath.row%2==0)
    {
        label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, 50)];
          [label setBackgroundColor:[self.cellBackgroundColor objectAtIndex:indexPath.row]];
         [label setText:[self.celltitle objectAtIndex:indexPath.row]];
         label.font=[UIFont fontWithName:[self.cellFontName objectAtIndex:indexPath.row] size:[[self.cellFontSize objectAtIndex:indexPath.row] integerValue]];

        label.textAlignment = NSTextAlignmentLeft;
        [[cell contentView] addSubview:label];
    }
    else{

        UITextView *messageBox= [[UITextView alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, 100)];

        cell.userInteractionEnabled=YES;
        if(indexPath.row==1)
        {
            // Uneditable UITextview
            messageBox.editable=NO;
        }
        [cell.contentView addSubview: messageBox];

    }
}
return cell;
 }
于 2013-02-14T13:47:37.083 に答える
-1

セルを使用する前に、セルのコンテンツビューを初期化する必要があります。これを試して:

cell.contentView = [[UIView alloc] initWithFrame:CGRectMake(0,0,cell.frame.size.width, 150)];
于 2013-02-14T13:29:06.063 に答える