-2

さて、私は最近、テーブルビュー データが表示されない問題を解決するために Darren に助けられました。参照する文書をここに残しておきます。

ファイルをダウンロード (3.12mb)

ストーリーボードでは、最後に 3 つのオブジェクトがあり、そのうちの 2 つは、tableView で選択されたアイテムに応じて自動的に変化します。私は別のラベルを追加したいと思います (プロジェクトで既に行われています) およびそれを使用して、テーブル ビューで選択されたアイテムに応じていくつかの情報がここに表示されるようにします。他の2と同じように。

これどうやってするの?


ダウンロード ファイルを信頼していない人のために、役立つコードをいくつか用意しました。Tag#3 のラベルに "myData2" を表示したいと考えています。これどうやってするの?

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Define our test data
    myData = [NSMutableArray arrayWithObjects:
              @"Chasing Amy", 
              @"Mallrats", 
              @"Dogma", 
              @"Clerks", 
              @"Jay & Silent Bob Strike Back",
              @"Red State",
              @"Cop Out",
              @"Jersey Girl",
              nil];

    //test for 2nd data
    myData2 = [NSMutableArray arrayWithObjects:
              @"Info for Chasing Amy item",
              @"Info for Mallrats",
              @"Info for Dogma",
              @"Info for Clerks",
              @"Info for Jay & Silent Bob Strike Back",
              @"Info for Red State",
              @"Info for Cop Out",
              @"Info for Jersey Girl",
              nil];
}

// Return number of sections in table (always 1 for this demo!)
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

// Return the amount of items in our table (the total items in our array above)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [myData count];
    return [myData2 count];
}

// Return a cell for the table
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // A cell identifier which matches our identifier in IB
    static NSString *CellIdentifier = @"CellIdentifier";

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

    // Get the cell label using it's tag and set it
    UILabel *cellLabel = (UILabel *)[cell viewWithTag:1];
    [cellLabel setText:[myData objectAtIndex:indexPath.row]];

    // get the cell imageview using it's tag and set it
    UIImageView *cellImage = (UIImageView *)[cell viewWithTag:2];
    [cellImage setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg", indexPath.row]]];

    return cell;
}

// Do some customisation of our new view when a table item has been selected
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure we're referring to the correct segue
    if ([[segue identifier] isEqualToString:@"ShowSelectedMovie"]) {

        // Get reference to the destination view controller
        Tab2_ItemViewController *vc = [segue destinationViewController];

        // get the selected index
        NSInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];

        // Pass the name and index of our film
        [vc setSelectedItem:[NSString stringWithFormat:@"%@", [myData objectAtIndex:selectedIndex]]];
        [vc setSelectedIndex:selectedIndex];

        //
        [vc setSelectedItem:[NSString stringWithFormat:@"%@", [myData2 objectAtIndex:selectedIndex]]];
        [vc setSelectedIndex:selectedIndex];
    }
}

@end

今、私はブレークポイントを取得します:

ファイルをダウンロード (3.12mb)

#import "Tab2_TableViewController.h"
#import "Tab2_ItemViewController.h"

@implementation Tab2_TableViewController

// When the view loads, define our data
- (void)viewDidLoad
{
    [super viewDidLoad];

    // Define our test data
    myData = [NSMutableArray arrayWithObjects:
              @"Chasing Amy",
              @"Mallrats",
              @"Dogma",
              @"Clerks",
              @"Jay & Silent Bob Strike Back",
              @"Red State",
              @"Cop Out",
              @"Jersey Girl",
              nil];

    // Define our test data2
    myData2 = [NSMutableArray arrayWithObjects:
              @"info Chasing Amy",
              @"info Mallrats",
              @"info Dogma",
              @"info Clerks",
              @"info Jay & Silent Bob Strike Back",
              @"info Red State",
              @"info Cop Out",
              @"info Jersey Girl",
              nil];
}



// Return the amount of items in our table (the total items in our array above)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [myData count];
    return [myData2 count];
}

// Return number of sections in table (always 1 for this demo!)
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

// Return a cell for the table
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // A cell identifier which matches our identifier in IB
    static NSString *CellIdentifier = @"CellIdentifier";

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

    // Get the cell label using its tag and set it
    UILabel *cellLabel = (UILabel *)[cell viewWithTag:1];
    [cellLabel setText:[myData objectAtIndex:indexPath.row]];

    // Get the cell label2 using its tag and set it
    UILabel *cellLabelInfo = (UILabel *)[cell viewWithTag:3];
    [cellLabelInfo setText:[myData2 objectAtIndex:indexPath.row]];

    // get the cell imageview using its tag and set it
    UIImageView *cellImage = (UIImageView *)[cell viewWithTag:2];
    [cellImage setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg", indexPath.row]]];

    return cell;
}

// Do some customisation of our new view when a table item has been selected
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure we're referring to the correct segue
    if ([[segue identifier] isEqualToString:@"ShowSelectedMovie"]) {

        // Get reference to the destination view controller
        Tab2_ItemViewController *vc = [segue destinationViewController];

        // get the selected index
        NSInteger selectedIndex = [[self.tableView indexPathForSelectedRow] row];

        // Pass the name and index of our film
        [vc setSelectedItem:[NSString stringWithFormat:@"%@", [myData objectAtIndex:selectedIndex]]];
        [vc setSelectedIndex:selectedIndex];
        [vc setSelectedItemInfo:[NSString stringWithFormat:@"%@", [myData2 objectAtIndex:selectedIndex]]];
    }
}

@end

ブレークポイントは最小行にあります "[vc setSelectedItemInfo:[NSString stringWithFormat:@"%@", [myData2 objectAtIndex:selectedIndex]]];"

4

2 に答える 2

0

ところで、あなたの を見ると、cellForRowAtIndexPathここにいくつかの奇妙な構造があります。

セル プロトタイプを使用していないが、独自のコントロールを使用している場合は、セルを作成するときにそれらを作成する必要があります。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // A cell identifier which matches our identifier in IB
    static NSString *CellIdentifier = @"CellIdentifier";

    // Create or reuse a cell
    UILabel *cellLabel;
    UILabel *cellLabelInfo;
    UIImageView *cellImage;

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cellLabel = [[UILabel alloc] init...];
        cellLabel.tag = 1;
        cellLabelInfo = [[UILabel alloc] init...];
        cellLabelInfo.tag = 3; 
        cellImage = [[UIImageView alloc] init...];
        cellImage.tag = 2;
    }
    else
    {
        cellLabel = (UILabel *)[cell viewWithTag:1];
        cellLabelInfo = (UILabel *)[cell viewWithTag:3];
        cellImage = (UIImageView *)[cell viewWithTag:2];
    }

    // Get the cell label using its tag and set it
    [cellLabel setText:[myData objectAtIndex:indexPath.row]];

    // Get the cell label2 using its tag and set it
    [cellLabelInfo setText:[myData2 objectAtIndex:indexPath.row]];

    // get the cell imageview using its tag and set it
    [cellImage setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg", indexPath.row]]];

    return cell;
}

3 つのコントロールをプログラムでどのように作成するかについての詳細は、皆さんにお任せしますが、うまくいけば、アイデアが得られることを願っています。セルを作成するときに任意のカスタム コントロールを作成 (およびそれぞれtagのプロパティを設定) し、セルを正常にデキューした場合は、それらのサブビューを参照するだけで済みます。

正直なところ、画像、タイトル、サブタイトルだけを扱っている場合は、標準UITableViewCellのスタイルを使用し、そのtextLabeldetailTextLabelおよびimageViewプロパティを使用して、セルのカスタマイズを行わない傾向があります。また、カスタマイズを実行する場合は、セル プロトタイプとカスタム サブクラスを使用します。これにより、手動でコントロールを作成したり、viewWithTag.

于 2013-02-22T06:10:29.767 に答える
0

Tab2_ItemViewController に新しいプロパティを作成する必要があります (selectedItem の代わりに、selectedItemInfo を使用します)。また、更新するラベルに接続された新しい IBOutlet も必要です。次に、次を使用してデータを渡します。

[vc setSelectedItemInfo:[NSString stringWithFormat:@"%@", [myData2 objectAtIndex:selectedIndex]]];

これは、他のラベルにデータを渡す方法とまったく同じです。


リンクからコードをダウンロードしましたが、クラッシュしませんでした。作成した新しいプロパティを適切に設定していました。ただし、outputLabelInfo UILabel の IBOutlet はストーリーボードに接続されていませんでした。接続する必要があります。次に、次のように変更して、このラベルのテキストの設定方法を修正する必要があります。

 [outputLabel setText:selectedItemInfo]; 

[outputLabelInfo setText:selectedItemInfo];

Tab2_ItemViewController.m コードで。これを試して、プロジェクトをクリーンアップしてからもう一度実行してください。

于 2013-02-20T05:32:56.867 に答える