7

私はいたるところを探していましたが、私の答えはまったく見つかりませんでした。

UITableViewにJSONの動的セルを入力し、余分なセルを非表示にしようとしています。IBでセパレーターをオフにすると、もちろんすべてのセルセパレーターが消えます。各テーブルビューセルの下部と上部に線を追加して、情報を持つセルのみに境界線が表示されるようにするにはどうすればよいですか?Quartzをインポートし、CALayerで遊んでいますが、解決策が見つかりません。

ここで同様の質問を見つけましたが、唯一の答えはあまり役に立ちませんでした。

これを行うためのより良い、異なる方法は何でしょうか?

これが私のcellForRowAtIndexPathと私のnumberOfRowsInSectionです:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    // Return the number of rows in the section.
    //set equal to the information in the array

    return [_jsonDataArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    //create Dictionary of data in row
    NSDictionary *jsoninfo = [_jsonDataArray objectAtIndex:indexPath.row];

    //get required keys from dictionary and assign to vairables
    NSString *title = [jsoninfo objectForKey:@"title"];
    NSString *subtitle = [jsoninfo objectForKey:@"subtitle"];
    NSURL *imageURL = [NSURL URLWithString:[jsoninfo objectForKey:@"series_image_URL"]];

    //download the images.
    NSData *imgData = [NSData dataWithContentsOfURL:imageURL];
    UIImage *img = [[UIImage alloc] initWithData:imgData];


    //set boarder for custom cells... I need to have a border on the top and bottom of the cells I am creating so xcode does not autofill the empty space.



    //fill in text to cells
    cell.textLabel.text = title;
    cell.detailTextLabel.text = subtitle;
    cell.imageView.image = img;

    return cell;
}
4

5 に答える 5

26

また、これは最善のアイデアではないと思いますが、本当にこれを実行したい場合は、次のコードで目的を達成できます。

tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

// Draw top border only on first cell
if (indexPath.row == 0) {
    UIView *topLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 1)];
    topLineView.backgroundColor = [UIColor grayColor];
    [cell.contentView addSubview:topLineView];
}

UIView *bottomLineView = [[UIView alloc] initWithFrame:CGRectMake(0, cell.bounds.size.height, self.view.bounds.size.width, 1)];
bottomLineView.backgroundColor = [UIColor grayColor];
[cell.contentView addSubview:bottomLineView];

このコードをtableView:cellForRowAtIndexPath:メソッドに入れます。最終的な外観は次のUITableViewようになります。

選択的な境界線のあるテーブルビュー

特にセルが多い場合は、これはパフォーマンスにはあまり良くないことを考慮に入れてください。大量のデータがある場合は、図面を最適化する方法について、このSOの質問を参照してください。

于 2012-12-20T22:15:46.890 に答える
1

tableView:cellForRowAtIndexPath:メソッドでのみこれを試してください

[cell.contentView.layer setBorderColor:[UIColor grayColor].CGColor];
[cell.contentView.layer setBorderWidth:1.0f];
于 2014-01-07T15:44:54.077 に答える
0

有効なセルと線のある空のセルを「区別」しようとするのは、次善の解決策のように思えます。優れたアプローチは、テーブルにデータを入力する前にデータソースをクリーンアップすることです。

于 2012-12-20T21:46:22.603 に答える
0

カスタムセルを使用します。Datasoure(モデル)は、情報をカスタムセルに送り込む必要があります。各行に設定できるカスタムセルクラス内にセッターを作成します。のように....


  1. 再利用IDを使用してカスタムセルを割り当て、

  2. 行に次のように表示するかどうかを決定するプロパティを渡します。
    [cellsetCustomLines:Model.property];

  3. セルを返します。


CustomCellを任意の方法、画像、線、色、またはセル間の違いをユーザーに見せるその他の方法で設計するための柔軟性が大幅に向上します。

技術的には、Marco's Answerは機能し、単純なソリューションでうまく機能します。しかし、これをこれ以上拡張することはできません。

于 2012-12-21T02:14:59.283 に答える
0

これは質問に対する答えではありませんが、元の問題のクリーンな解決策です。

UITableViewのフッターとして空のUIViewを追加します。その後、空のセルが非表示になります。この回答を参照してください。

于 2015-12-03T15:03:07.650 に答える