0

当谈到 xcode(3 周前开始学习)时,我是一个完全的菜鸟,PHP 是我的事。无论如何,当有人点击表格视图中的单元格((正在填充来自 json 文件的数据)的单元格时,我试图将值从 MasterViewController 传递给 DetailViewController。问题是我首先得到一个空值时间。之后它就完美地工作了。

这是我的 cellForRowAtIndexPath

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

FetchDetails* item = _feed.items[indexPath.row];

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

UILabel *itemTitle = (UILabel *)[cell viewWithTag:101];
itemTitle.text = [NSString stringWithFormat:@"%@", item.prodTitle];

UILabel *itemDate = (UILabel *)[cell viewWithTag:102];
itemDate.text = [NSString stringWithFormat:@"%@", item.prodDate];

UILabel *itemUser = (UILabel *)[cell viewWithTag:103];
itemUser.text = [NSString stringWithFormat:@"by %@", item.prodUser];

UIImageView *itemThumb = (UIImageView *)[cell viewWithTag:100];
itemThumb.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString: item.prodImage]]];
return cell;
}

didSelectRowAtIndexPath。item.prodId 是 json 的一部分,但未显示在原型单元格上。这是我在 detailviewcontroller 上需要的值

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 FetchDetails* item = _feed.items[indexPath.row];
_selectedItem = [NSString stringWithFormat:@"%@", item.prodId];
}

和 prepareForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

if ([[segue identifier] isEqualToString:@"showItemDetail"]) {

    DetailViewController *destVieController = segue.destinationViewController;
    destVieController.passedValue = _selectedItem;
    NSLog(@"%@", _selectedItem);

  }
}

在阅读了几个教程后,我想出了所有这些代码。我不知道为什么它第一次不起作用,并且在第二次点击时完美地工作,依此类推。任何帮助,将不胜感激。

4

1 回答 1

2

解决了。我不得不停止使用 didSelectRowAtIndexpath 并在 prepareForSegue 中做所有事情。

这是我在 segue 上使用的代码:

    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:self.tableView.indexPathForSelectedRow];
    UILabel *label = (UILabel *)[cell viewWithTag:99];

    DetailViewController *detailVC = segue.destinationViewController;
    detailVC.passedId = [label text];

如您所见,我使用 viewWithTag 从标记的标签中获取了 prodId。

于 2013-02-03T00:59:23.963 回答