在didSelectRowAtIndexPath中,UITextView在UITableViewCell中显示并可编辑

时间:2016-06-20 17:39:33

标签: ios objective-c uitableview

我创建了一个自定义表格视图单元格,我希望其中的隐藏文本视图变为可见,并在用户选择该行时进行编辑。以下是我尝试过的方法(此单元格仅出现在某个部分的最后一行)

表格视图委托

- (void)tableView:(UITableView *)tableViewVar didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    ...

    if (indexPath.row == (int)[self.selectedLabels count] - 1 ) {
        [self.lastCell addCustomInfo];
    }

}

表格视图数据源

    - (UITableViewCell *)tableView:(UITableView *)tableViewVar cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        ...

        UITableViewCell *cell;
        if (indexPath.row != [self.labels count] - 1) {
            ...
        } else {
            cell = [self produceTableCellWithNibName:@"SignUpSurveyInputRowTableViewCell" inTableView:tableView withCellIdentifier:@"SignUpSurveyTableViewCell"];
            self.lastCell = cell;
        }

        ...

        return useCell;
    }

- (UITableViewCell *) produceTableCellWithNibName:(NSString *)nibName inTableView:(UITableView *)tableViewVar {
    return [self produceTableCellWithNibName:nibName inTableView:tableViewVar withCellIdentifier:nibName];
}


- (UITableViewCell *) produceTableCellWithNibName:(NSString *)nibName inTableView:(UITableView *)tableViewVar withCellIdentifier:(NSString*) cellId {
    UITableViewCell *cell = [tableViewVar dequeueReusableCellWithIdentifier:cellId];
    if( cell == nil ) {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil];
        for (id currentObject in topLevelObjects){
            if ([currentObject isKindOfClass:[UITableViewCell class]]) {
                cell = currentObject;
                break;
            }
        }
    }
    return cell;
}

表格查看单元格方法

- (void) addCustomInfo {

        NSLog(@"inside add custom info");
        self.surveyTextView.userInteractionEnabled = YES;
        self.surveyTextView.hidden = NO;
        self.surveyTextLabel.hidden = YES;            
        [self setNeedsDisplay];

        [self.surveyTextView becomeFirstResponder];
    }

    - (BOOL)textViewShouldReturn:(UITextView *)textViewVar {
        [textViewVar resignFirstResponder];
        return YES;
    }

    - (void) textViewDidChange:(UITextView *) textViewVar
    {
        [UIView animateWithDuration:0.1 animations:^{
            [textViewVar invalidateIntrinsicContentSize];
        }];
    }

目前,当我选择相关的表格视图单元格时,我会看到日志语句inside add custom info,但没有任何反应 - 没有编辑开始,标签不会消失,文本视图也不会显示。

如何获得以下所需的行为:

  1. 用户选择表格视图
  2. 文字视图变得可见且可编辑,覆盖标签变得不可见
  3. 文本视图处于编辑模式,即键盘出现,用户可以键入文本视图
  4. 以下是我尝试的内容:

    • 已验证的日志语句正在运行,因此方法正在运行
    • 验证所有IBOutlet已连接
    • 在表格视图单元格方法中插入一条日志语句,以检查它是否正在打印与该单元格相关的值,以确认我正在处理正确的单元格。
    • 尝试打印标签文本,然后更改并打印。 log语句反映了更改,但单元格的外观不再反映。
    • 修改了代码(如上所示)以保存最后一个表视图单元格(我试图改变的那个)作为表视图控制器的类属性,所以我知道我有相同的一个。我看到相同的行为 - 更新其外观的单元格方法似乎运行(基于日志语句),但我看不到任何变化。即使我重新加载和setNeedsDisplay表视图,也没有骰子。

    我最好的猜测是,我运行方法的单元格不是我在桌面视图中显示的实例化的单元格,但我已经在使用dequeue所以我还可以做什么来排除故障或确保我在适当的单元格上调用该方法?

0 个答案:

没有答案