在导航堆栈中的不同UITableView中访问特定的UITableViewCell

时间:2011-04-06 13:21:45

标签: iphone objective-c uitableview ios4 uinavigationcontroller

我正在使用tabbar应用程序。也许这是一个微不足道的问题,但我只想简单地替换UITableViewCell的labelvalue。我从TextView获取NSString,它嵌入在UITableView“输入”中。我想要修改的单元格位于“输入”视图的父视图中。 修改应在保存功能中进行

 - (void)save:(id)sender
{   
    //Get the needed string
    DescriptionViewCell *cell = (DescriptionViewCell *) [descriptionTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
    NSString *temp = [[NSString alloc]initWithString:[cell.textView text]];

    //Access parentview
    FindTableViewController *rootController = [self.navigationController.viewControllers objectAtIndex:1];
    UITableViewCell *descriptionCell = [rootController.findUITable cellForRowAtIndexPath: [NSIndexPath indexPathForRow:0 inSection: 1]];

    //replace label string
    descriptionCell.textLabel.text = temp;
    [temp release];

    //return to parentview
    [self.navigationController popViewControllerAnimated:YES];
}


不幸的是,descriptionCell不包含任何数据,并且不会进行修改。您是否在我的代码中看到任何问题,或者我应该“玩”索引 提前谢谢。
干杯,
西蒙

2 个答案:

答案 0 :(得分:0)

实际上我认为你在descriptionCell中什么都没有,因为当时那个单元格不可见。如果单元格不可见,则cellForRowAtIndexPath返回nil。查看文档 -

的cellForRowAtIndexPath:

Returns the table cell at the specified index path.
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
Parameters

indexPath

    The index path locating the row in the receiver.

Return Value

    An object representing a cell of the table or nil if the cell is not visible or indexPath is out of range.

You can do this by managing text in some data structure and when you go back to previous view you call reloadData and check for that value in cellForRowAtIndexPath. 

答案 1 :(得分:0)

您可以在根表视图控制器中添加NSString属性,该属性将用于存储更新文本的值。然后在您的save方法中,使用新文本更新根视图controlelrs NSString属性的值。最后,您可以调用您的根视图控件tableviews reloadData方法,如下所示:

FindTableViewController *rootController = [self.navigationController.viewControllers objectAtIndex:1];
[rootController.tableView reloadData];

在根表视图中,您希望实现表视图- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath方法,以便在调用reloadData时将NSSTring属性的值应用于相应的单元格。

if(indexPath.row == myCellIndex){
     cell.textLabel.text = myStringProperty; 
}