访问cellforrow外的tableview内容

时间:2014-11-03 07:16:44

标签: ios objective-c uitableview

我有一个视图,其中我在顶部有一个按钮,在底部有一个带有自定义单元格的桌面视图        自定义单元格我有一个文本字段,我试图访问tableview单元格外的文本字段内容,在顶部按下该按钮的行方法,只有显示的单元格文本,如果滚动到顶部并点击在保存时,底部文本字段值为nil,如果我滚动到底部并点击保存底部文本字段值为nil,我想它与使用标识符的dequeue可恢复单元格有一些关系。

// tableview方法

- (UITableViewCell*) tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
    static NSString *simpleTableIdentifier = @"AcessoryCell";

    AcessoryCell *cell = (AcessoryCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"AcessoryCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }
    }




for (NSInteger i=0; i<selectedButtonsArray.count; i++)
{

    NSNumber * num = [selectedButtonsArray objectAtIndex:i];
    NSIndexPath * indexPath=[NSIndexPath indexPathForRow:[num intValue] inSection:0];
    AcessoryCell *cell = (AcessoryCell *) [self.acessoryTableView cellForRowAtIndexPath:indexPath];
    NSLog(@"text field text is %@", cell.celltextField.text);


}

日志

text is 1
text is 1
text is 1
text is 1
text is 1
text is 1
text is (null)
text is (null)

如果我滚动到底部,则记录是

text is (null)
text is (null) 
text is 1
text is 1
text is 1
text is 1
text is 1
text is 1

4 个答案:

答案 0 :(得分:2)

试试这个:

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:YOUR_ROW inSection:YOUR_SECTION];

UITableViewCell* cell = [yourTable cellForRowAtIndexPath:indexPath];
cell.textLabel.textColor = YOUR_COLOR;
[yourTable reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

答案 1 :(得分:0)

是的,在这里您需要为每个单元格指定一个标识符,当您使用static标识符时,它不会将每个单元格加载到内存中。

你必须提供一个唯一的标识符来加载UITableView中的所有单元格,并在滚动UITableView时保持不变。

替换此行

static NSString *simpleTableIdentifier = @"AcessoryCell";

有了这个

NSString *simpleTableIdentifier = @"AcessoryCell";

修改

- (UITableViewCell*) tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
    NSString *simpleTableIdentifier = @"AcessoryCell";

    AcessoryCell *cell = (AcessoryCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
//.... do your stuff
}

答案 2 :(得分:0)

我希望您基于该行显示文本字段的不同值。 使用相同的逻辑来获取文本字段的值。

您是否正在使用数组值来显示基于行的文本字段?

答案 3 :(得分:0)

斯威夫特3:

let cell :SampleTableCell = sampleTableView.cellForRow(at: IndexPath(row: 0, section: 0)) as! SampleTableCell