【问题标题】:Problems Nesting UITextField within UITableViewCell在 UITableViewCell 中嵌套 UITextField 的问题
【发布时间】:2015-04-02 17:51:25
【问题描述】:

我有一个数组,我们称之为itemsArray,它包含一个名为Item. 的类的实例,这些items 具有长度、宽度和高度属性。 itemsArray 也嵌套在另一个类 (questionnaire) 中,该类也有一个名为 activeItem 的属性。基本上,activeItem 是一个整数,它返回的值对应于当时正在编辑的itemsArray 中的item 的索引。因此,如果我想更新itemsArray 中的第二个item,我会将activeItem 设置为1,然后从那里开始。

现在,我需要填充itemsArray 中项目的这些长度、宽度和高度属性。为此,我正在创建一个带有自定义 UITableViewCell 的 tableView。这个 UITableViewCell,我们称之为 CustomTableViewCell, 有 3 个 UITextField 属性,对应于我放在情节提要上的 3 个 UITextField,lengthFieldwidthFieldheightField。我在将输入到文本字段中的值与它们对应的item 实例一起存储时遇到了一些麻烦。这是一些代码:

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

    self.cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"quantityCell"];
    [self.cell.lengthField addTarget:self action:@selector(lengthEdited:) forControlEvents:UIControlEventEditingChanged];
    return self.cell; 
}

- (void)lengthEdited:(id)sender{
CGPoint position = [sender convertPoint:CGPointZero toView:self.quantityTableView];
NSIndexPath *indexPath = [self.quantityTableView indexPathForRowAtPoint:position];
[questionnaire setActiveItem: indexPath.row]; 
[[questionnaire.itemsArray objectAtIndex:activeItem]setItemLength self.cell.lengthField.text];
}

为简单起见,维度可以存储为字符串。现在,我在运行时添加了item 的实例,并且我试图在此后不久编辑这些实例的尺寸,但是当我尝试这样做时,似乎只有 tableView 中的最后一个对象能够正确响应。我已经 NSLog'd activeItem,我看到,每当我编辑一个单元格时,它会将 activeItem 设置为 indexPath.row 的值,这是绝对正确的。但是,当我也尝试在activeItem 中对itemLength 的值进行NSLog 记录时,我会返回空值,直到我尝试将最后一项记录在数组中。一旦我这样做了,无论我编辑哪个单元格,我都会得到该数组长度中最后一项的值。

有人知道我在这里做错了什么吗?我绝望地被困住了。先感谢您。

【问题讨论】:

    标签: ios objective-c uitableview cocoa-touch uitextfield


    【解决方案1】:

    如果你使用 textfield 的 Tag 属性,这会更简单

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    
        self.cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"quantityCell"];
        [self.cell.lengthField setTag:indexPath.row];
        [self.cell.lengthField addTarget:self action:@selector(lengthEdited:) forControlEvents:UIControlEventEditingChanged];
        return self.cell; 
    }
    

    那么你可以这样做

    - (void)lengthEdited:(id)sender{
    
       UITextField *lengthTextField = (UITextField*)sender;
       NSInteger tag = lengthTextField.tag;
       [questionnaire setActiveItem: tag]; 
       [[questionnaire.itemsArray objectAtIndex:tag]setItemLength: lengthTextField.text];
    }
    

    但是为此,您应该在活动索引中拥有正确的 Item 对象。

    【讨论】:

    • 这当然有助于保留数据。谢谢!现在我唯一的问题是滚动使我的文本视图消失了:\
    猜你喜欢
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2014-11-23
    • 2011-05-21
    相关资源
    最近更新 更多