1

これはブログタイプのアプリ用で、ブログの投稿が表示され、その下にその投稿へのいくつかのコメントを読むことができます。

| Post Title Here
|
| Post text here lorem ipsum 
| dolor bla bla bla
|
| ---------------------------------------------
| Comment 1
| ---------------------------------------------
| Comment 2
| ---------------------------------------------
| Comment 3
| ---------------------------------------------
| etc

私のJSONフィードは次のようになります。

...
{
    "post_id": "1463",
    "post_title": null,
    "post_text": "dffsdjdflkjklk dlfkjsdlfkj",
    "comment": [
        {
            "comment_id": "2162",
            "comment_text": "yuiyuiiopiop",
        },
        {
            "comment_id": "2163",
            "comment_text": "tyutyutyutyuu",
        },
        {
            "comment_id": "2164",
            "comment_text": "sdfsertertr",
        },
    ]
},
...

そして、これは私がそれを読む方法です

NSDictionary *post           = self.detailItem;
NSArray      *commentThread  = [post objectForKey:@"comment"];
NSUInteger   commentCount    = [commentThread count];

    for (int i = 0; i < commentCount; i++) {
        NSDictionary *comment      = [commentThread objectAtIndex:i];
        NSString     *commentText  = [comment objectForKey:@"comment_text"];

        commentTextLabel.text  = commentText;
    }

ストーリーボードには、に接続されたUILabelが1つありcommentTextLabelます。

上記のアプローチでは、最後のコメントのみが私の見解に表示されます。UILabelがi何度も生成されることを期待していましたが、そうではないようです。

コメントごとに1つずつ、複数のUILabelを作成するにはどうすればよいですか。そうすれば、この投稿の上部に示すように、それらがスタックされてしまいます。

どんな種類の助け、ポインタまたはアドバイスも大歓迎です。

4

2 に答える 2

2

ストーリーボードに 1 つの UILabel が接続されているため、反復ごとにコンテンツを上書きしています。

あなたがしたいことは、コメントごとに新しい UILabel を作成し、それをフレームに設定し、サブビューとして親ビューに追加して、次のビューに繰り返すことです。

例えば:

for (int i = 0; i < commentCount; i++) {
    NSDictionary *comment      = [commentThread objectAtIndex:i];
    NSString     *commentText  = [comment objectForKey:@"comment_text"];
    UILabel      *newLabel     = [UILabel alloc] init];

    newLabel.text = commentText;
    newLabel.frame = CGRectMake(origin.x, origin.y, width, height);
    [self.view addSubview:newLabel];
}

origin.x、origin.y は、必要に応じて毎回計算する必要があります。最後の origin.y を保持する変数を挿入し、その高さとマージンを毎回追加して、リストのように見せることができます。

一方、これを行う最も効率的な方法は、UITableView を使用することです。JSON は配列に解析でき、各エントリはセルになります。このようにして、セルの再利用を利用できます。セルを再利用せずに現在の設定を続けると、コメントが多すぎるとアプリのパフォーマンスが影響を受ける可能性があります。

また、TableView または ScrollView でラベルを表示することは、フレームレートに関してあまり効果的ではないことも考慮してください。アルファブレンディングはパフォーマンスに影響を与えます。また、トゥイーティーの高速パフォーマンスのテーブルビューについてグーグルで検索するか、この投稿を確認することをお勧めします atebits Twitter fast scrolling

于 2012-10-16T01:20:56.233 に答える
1

おそらく を に置き換える必要がUILabelありUITableViewControllerます。そうすれば、配列を(作成するカスタム プロパティを介して)commentThreadに直接渡すことができます。UITableViewControllerその後UITableViewController、データソース メソッド (実装する必要があります) を介して配列を反復処理できます。

現在持っているように、ループの反復ごとに新しいラベルを作成していません。配線した 1 つのラベルのテキストを設定するだけです。本当にラベルを使用したい場合はUIView、ラベルのコンテナとなる を接続してから、for ループでラベルをUIView作成し、ストーリーボードで作成したラベルに追加します。

私の2セント:)

于 2012-10-16T00:31:41.240 に答える