7

設定アプリケーションのwifi設定と同じようにUISegmentedControl、グループに参加しようとしています。UITableViewCell私が抱えている問題は、二重の境界線が表示されることです。の境界線を 1 つと の境界線を 1 つ取得UISegmentedControlUITableViewCellます。

から境界線を削除する必要があると思いますUITableViewCell。どうすればそれを行うことができますか?

4

6 に答える 6

7

これがまだ答えを得ていることに気づきました。たまたま別のプロジェクトでこれをしなければならなかったのですが、この質問をして以来、iPhone dev についてさらに多くのことを学びました。これが私が最近それを解決した方法です。フレームを正しいサイズにすることがすべてです。これは、標準のテーブルに対して行う必要があります。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
if(cell == nil) 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellIdentifier"] autorelease];

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithFrame:CGRectMake(-1.0f, -1.0f, 302.0f, 46.0f)];
[cell.contentView addSubview:segmentedControl];
于 2009-12-28T14:08:16.010 に答える
3

Wi-Fi設定の場合、彼らが行ったことは、「このネットワークを忘れる」ボタン、「IPアドレス」ラベル、および「DHCP/BootP/Static」セグメント化されたテーブルのすべての部分を制御することであると思われますヘッダー ビュー。テーブルの中央でこれを行う必要がある場合 (それぞれtableHeaderViewおよびプロパティを使用する上部または下部とは対照的に)、 、または対応するバリアントでtableFooterViewデリゲート メソッド-tableView:viewForHeaderInSection:を使用することをお勧めします。これらのいずれかを使用して、テーブル ビューのその「セクション」にカスタム ビューを設定し (クリアな背景色または を使用)、残りの部分と一致するように配置されたラベルとセグメント化されたコントロールを含みます。テーブルセクション。-tableView:heightForHeaderInSectionFooter[UIColor groupTableBackgroundColor]

于 2009-12-25T00:49:45.533 に答える
2

この投稿の手法を使用してUITableViewCellの背景の不透明度を削除すると、UISegmentedControlのみをテーブルの行に表示するのがより簡単になりました。

于 2011-12-14T18:25:41.253 に答える
1

これで少し進みました。これまでのところ、UITableViewCell をサブクラス化しました。UISegmentedControl を含む nib を作成し、UITableViewCell の背景アルファを 0 に設定しました。まだ完全に正しくは見えませんが、以前よりは良くなっています。

于 2009-05-22T13:06:03.087 に答える
1

私の解決策は、セグメント化されたコントロールが収まるようにサイズ変更できるようにし、テーブルビューの背景をtableView:willDisplayCell:forRowAtIndexPath:.

これにより、レイアウト メトリックをハードコーディングせずに、「Settings.app > WiFi > Your Network > IP Address」セグメント化されたコントロールと同じ結果が得られます。

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

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

    UISegmentedControl *control = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"One", @"Two", @"Three", nil]];
    control.segmentedControlStyle = UISegmentedControlStylePlain;
    control.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
    control.frame = cell.contentView.bounds;
    [cell.contentView addSubview:control];
    [control release];
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.backgroundView.alpha = 0.0;
}
于 2012-03-29T11:31:29.543 に答える
0

トリックは、UISegmentedControlのサイズをbackgroundViewコントロールのサイズではなく、コントロールのサイズにすることのようcontentViewです。次のようにして、プログラムでそれを行うことができました。

    // Size to cover the entire background
    self.contentView.frame = self.backgroundView.frame;
    self.myControl.frame = self.contentView.bounds;

アクセサリを使用している場合は、 も考慮する必要があることに注意してくださいaccessoryView

その理由は、ビューの階層が次のようになっているためです。

  • self( UITableViewCellまたはサブクラス)
    • backgroundView
    • contentView
      • (あなたのコントロールはここに行きます)
    • accessoryView

縦向きレイアウトでは、backgroundViewのフレームは ですが{{9, 0}, {302, 44}}contentViewのフレームはわずかに小さく、{{10, 1}, {300, 42}}です。これにより、テーブル スタイルがグループ化されている場合に、セルに 1 ピクセルの「境界線」が与えられます。contentView 適切なサイズを取得するには、とコントロールの両方のサイズを変更する必要があります。

(注: Apple は実際にはSDKUICatalogサンプル コード プロジェクトにUISegmentedControlの例をいくつか持っていますが、 UIViewControllerを使用してメイン ビューの背景色をテーブルの背景色に設定することで、効果的に「ごまかしています」。)

于 2009-12-24T23:56:23.820 に答える