0

私は xcode に関してはまったくの初心者です (3 週間前に学習を開始しました)。PHP は私のものです。とにかく、誰かがテーブルビューのセルをタップしたときに、MasterViewController から DetailViewController に値を渡そうとしています ((json ファイルからのデータが入力されています)。問題は、最初に null 値を取得することです)。その後は完全に機能します。

これは私の 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);

  }
}

いくつかのチュートリアルを経て、このコードのすべてを思いつきました。なぜそれが最初に機能せず、2回目のクリックで完全に機能するのか、私にはわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

2

解決しました。didSelectRowAtIndexpath の使用をやめ、prepareForSegue ですべてを行う必要がありました。

これは、セグエで使用したコードです。

    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 に答える