0

我以编程方式在 uitableviewcontroller 中创建了一个 uitextview,但我无法编辑 textview。这是我的表格布局的概述:

第 1 行:UILabel

第 2 行:不可编辑的 UITextview

第 3 行:UILabel

第 4 行:可编辑的 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 和 textviewshouldbeginediting 方法,但 row4 textview 仍然不可编辑......有什么帮助吗?

4

4 回答 4

2

除了使 messageBox 可设置编辑和设置用户交互启用之外,您还必须确保在 UITableViewController 中启用这些属性,因为 UITextView 嵌套在其中!

[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 回答