UITableViewをグループ化されたスタイルに設定するにはどうすればよいですか


89

UITableViewControllerセクションを持つサブクラスがあります。セクションはデフォルトのスタイルで表示されています(角が丸くない)。TableViewスタイルをコードでグループ化する方法を教えてください。私はこれにInterface Builderを使用していないので、次のようなものが必要です

[self.tableView setGroupedStyle]

Stack Overflowで検索しましたが、答えが見つかりませんでした。


スウィフトバージョン:リンク
ファンボエロ

回答:


107

私があなたの意味を理解している場合、そのスタイルでコントローラーを初期化する必要があります。何かのようなもの:

myTVContoller = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];

3
述べたように、それは変更可能なプロパティではありません。1つは常にグループ化されます。
コーリーフロイド

これは正解ではなく、UITableViewControllerサブクラスの問題を解決していません。UITableViewControllerを継承する場合は、コンストラクターをオーバーライドして、別のUITableViewまたはUITableViewControllerを作成しないでください。
ミカエル

質問で述べられているように、それがサブクラス化されたコントローラーである場合、これをどのように行いますか?
Ethan Zhao

130

次のことができます。

UITableView *myTable = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

スウィフト3:

let tableView = UITableView.init(frame: CGRect.zero, style: .grouped)

12
これが本当の解決策です!ありがとう。受け入れられた答えは間違っています、少なくともOS
ダック

4
承認されたソリューションにタイプミスがあったことに注意してください。私はそれを修正しました。どちらの答えも私にとってはうまくいきますが、それらは異なるものをインスタンス化します。この答えはUITableView、受け入れられた答えはUITableViewControllerです。
nevan king 2010

3
実際、受け入れられた答えは誤解を招くものです。OPが言った「UITableViewConotrollerサブクラスがあります」を読んでください。受け入れられた回答は、プレーンなジェーンUITableViewControllerのみを提供します。詳細を知らなければ、サブクラスに関するユーザーの問題を解決することは不可能です。この答えとself.myTableの使用は、おそらく私より良いでしょう。
Feloneous猫

これはiOS8の制約でも機能します(iOS7については不明です)... CGRectZeroテーブルビュースタイルに沿ってのフレームで初期化し、制約を追加すると、制約とともに適切なスタイルが得られます。
Glen Selle、2014

20

私はあなたに私の解決策を与えます、私は「XIBモード」で働いています、ここではUITableViewControllerのサブクラスのコードです:

-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithStyle:UITableViewStyleGrouped];
    return self;
}

6
この解決策の警告-これがNIBのnavigationControllerの下にある場合、その参照が失われ、混乱することになります。
ジェシーミリカン

14

以下のコードは私のために働きました、私はUITableviewクラスも使用しています

- (id)initWithStyle:(UITableViewStyle)style
{
     self = [super initWithStyle:UITableViewStyleGrouped];

     if (self)
    {

     }
    return self;
}

1
これは、UITableViewControllerのサブクラスを使用しているユーザーにとって適切なソリューションです。ありがとう!
Chad Pavliska、2015

9

UITableViewControllerを継承している場合は、もう一度tableViewを初期化できます。

目的C:

self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

迅速:

self.tableView = UITableView(frame: CGRect.zero, style: .grouped)

6

質問で述べたように難しい設定ではありません。実際、それはかなり簡単です。ストーリーボードでこれを試してください。

ここに画像の説明を入力してください


TableViewControllerの一部として既にtableViewを設定している場合は、この方法が最適です。他の回答には、など、新しいのtableViewをインスタンス化に集中
カルティクKannan

3

スウィフト4

通常のTableViewの使用

let tableView = TableView(frame: .zero, style: .grouped)

TPKeyboardAvoidingTableViewの使用

let tableView = TPKeyboardAvoidingTableView(frame: .zero, style: .grouped)


2

UI自体にグループ化されたスタイルを設定する場合:-TableViewを選択し、(属性インスペクターの)「スタイル」をプレーンからグループ化に変更します。


2

別のSwiftファイルで既に作成したサブクラスで使用する場合も、これを行うことができます(おそらく100%正しくないが、機能します)。

override init(style: UITableViewStyle) {
    super.init(style: style)
    UITableViewStyle.Grouped
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

これでappdelegate.swiftで呼び出すことができます:

let settingsController = SettingsViewController(style: .Grouped)

1

ストーリーボード/ XIBを使用してこれを行うこともできます

  1. ストーリーボードに移動-> viewControllerを選択->テーブルを選択
  2. インターフェースビルダーで「スタイル」プロパティを選択します
  3. 「グループ化」を選択します
  4. できた

0

より多くのテーブル用に1つのTableViewがあり、このテーブルの1つがグループ化され、もう1つがプレーンである場合、UITableViewDelegateの関数を使用してプレーンスタイルをシミュレートできます。

override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {   
    return CGFloat.min
}

0

迅速4

ストーリーボードを使用したくない場合は、これが役立つ場合があります。

テーブルビューを追加して、クロージャーにプロパティを設定できます。

lazy var tableView: UITableView = {
        let tableView = UITableView(frame: .zero, style: .grouped)

        tableView.backgroundColor = UIColor(named: Palette.secondaryLight.rawValue)
        tableView.rowHeight = 68
        tableView.separatorStyle = .none
        tableView.translatesAutoresizingMaskIntoConstraints = false
        return tableView
    }()

次に、サブビューを追加して制約を設定します。


-5

グループ化されたスタイルの効果が得られるように、区切り線の色を明確にすることもできます。

[myTVContoller.tableView setSeparatorColor:[UIColor clearColor]];

セクションはこの方法で折りたたまれません。
brduca 2018

-11

以下を使用できます。

(instancetype)init {
return [[YourSubclassOfTableView alloc] initWithStyle:UITableViewStyleGrouped];
}

-27
self.tableView.style = UITableViewStyleGrouped

編集:

これは読み取り/書き込みプロパティであると想定していました。その場合、コントローラーをインスタンス化するときにDimitrisのアドバイスに従ってスタイルを設定するか、または(XIBを使用している場合)IBを介して設定することができます。


返信いただきありがとうございます。私はXIBを使用していません。カスタムクラスであるサブビューを持つタブコントローラーがあります。initWithStyle呼び出しをどこに配置できるかわからないので、TableView initを行いません。これは、タブコントローラーによって行われます。TableViewControllerのinitWithStyleを変更しても機能しないようです。
ネヴァンキング

dimitrisが言ったように、XIBを使用しない場合は、どこかで UITableViewControllerを初期化する必要があります。ここで、initWithStyle:呼び出しを使用します。
ドリュー、2009年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.