ฉันจะตั้งค่า UITableView เป็นสไตล์ที่จัดกลุ่มได้อย่างไร


92

ฉันมีUITableViewControllerคลาสย่อยที่มีส่วนต่างๆ ส่วนต่างๆจะแสดงด้วยสไตล์เริ่มต้น (ไม่มีมุมโค้งมน) ฉันจะตั้งค่าสไตล์ TableView ให้จัดกลุ่มในโค้ดได้อย่างไร? ฉันไม่ได้ใช้ Interface Builder สำหรับสิ่งนี้ดังนั้นฉันต้องการอะไรเช่น

[self.tableView setGroupedStyle]

ฉันค้นหาใน Stack Overflow แต่ไม่สามารถหาคำตอบได้


Swift version: Link
Juan Boero

คำตอบ:


109

ถ้าฉันเข้าใจว่าคุณหมายถึงอะไรคุณต้องเริ่มต้นคอนโทรลเลอร์ด้วยสไตล์นั้น สิ่งที่ต้องการ:

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

3
ตามที่ระบุไว้ไม่ใช่ทรัพย์สินที่สามารถเปลี่ยนแปลงได้ กลุ่มหนึ่งถูกจัดกลุ่มเสมอ
Corey Floyd

นี่ไม่ใช่คำตอบที่ถูกต้องไม่ใช่การแก้ปัญหาการมีคลาสย่อย UITableViewController หากคุณสืบทอด UITableViewController คุณต้องแทนที่ตัวสร้างไม่สร้าง UITableView หรือ UITableViewController อื่น
มิคาเอล

คุณจะทำสิ่งนี้ได้อย่างไรหากเป็นคอนโทรลเลอร์คลาสย่อยตามที่ระบุไว้ในคำถาม
Ethan Zhao

132

คุณสามารถทำสิ่งต่อไปนี้:

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

Swift 3:

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

12
นี่คือทางออกที่แท้จริง! ขอบคุณ. คำตอบที่ยอมรับนั้นผิดอย่างน้อยสำหรับ OS 3.0+
Duck

4
โปรดทราบว่ามีการพิมพ์ผิดในโซลูชันที่ยอมรับ ฉันได้รับการแก้ไขแล้ว คำตอบทั้งสองได้ผลสำหรับฉัน แต่พวกเขาสร้างตัวอย่างสิ่งที่แตกต่างกัน คำตอบนี้เป็นคำตอบที่ได้รับการยอมรับเป็นUITableView UITableViewController
เนวานคิง

3
อันที่จริงคำตอบที่ยอมรับนั้นทำให้เข้าใจผิด โปรดอ่านสิ่งที่ OP กล่าวว่า "ฉันมีคลาสย่อย UITableViewConotroller" คำตอบที่ยอมรับจะให้ UITableViewController เจนธรรมดาเท่านั้น โดยไม่ทราบรายละเอียดจึงเป็นไปไม่ได้ที่จะแก้ปัญหาผู้ใช้เกี่ยวกับคลาสย่อย คำตอบนี้และการใช้ self.myTable น่าจะดีกว่า IMHO
Feloneous Cat

สิ่งนี้ยังใช้ได้กับข้อ จำกัด บน iOS8 (ไม่รู้เกี่ยวกับ iOS7) ... เพียงแค่เริ่มต้นด้วยเฟรมCGRectZeroพร้อมกับสไตล์มุมมองตารางของคุณจากนั้นเพิ่มข้อ จำกัด ของคุณและคุณจะได้สไตล์ที่เหมาะสมพร้อมกับข้อ จำกัด ของคุณ
Glen Selle

20

ฉันให้วิธีแก้ปัญหาแก่คุณฉันกำลังทำงานใน "โหมด XIB" ที่นี่รหัสของคลาสย่อยของ UITableViewController:

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

6
ข้อควรระวังสำหรับโซลูชันนี้ - หากอยู่ภายใต้ navigationController ใน NIB การอ้างอิงนั้นจะสูญเสียการอ้างอิงนั้นและทำให้คุณสับสนจริงๆ
Jesse Millikan

14

ด้านล่างรหัสทำงานให้ฉันฉันยังใช้คลาส UITableview

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

     if (self)
    {

     }
    return self;
}

1
นี่เป็นทางออกที่เหมาะสมสำหรับผู้ที่ใช้คลาสย่อยของ UITableViewController ขอบคุณ!
Chad Pavliska

11

หากคุณกำลังสืบทอด UITableViewController คุณสามารถเริ่ม tableView อีกครั้งได้

วัตถุประสงค์ C:

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

รวดเร็ว:

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

6

การตั้งค่าที่ไม่ยากอย่างที่กล่าวไว้ในคำถาม จริงๆแล้วมันค่อนข้างง่าย ลองทำบนสตอรีบอร์ด

ป้อนคำอธิบายภาพที่นี่


หากคุณมี tableView ซึ่งเป็นส่วนหนึ่งของ TableViewController อยู่แล้วการตั้งค่าด้วยวิธีนี้จะดีที่สุด คำตอบอื่น ๆ มุ่งเน้นไปที่การสร้างอินสแตนซ์ tableView ใหม่เป็นต้น
Karthik Kannan



2

สำหรับชุดรูปแบบที่จัดกลุ่มใน UI เอง: - เลือก TableView จากนั้นเปลี่ยน "style" (ในตัวตรวจสอบแอตทริบิวต์)) จากธรรมดาเป็น Grouped


2

คุณสามารถทำได้เช่นกันหากคุณต้องการใช้กับคลาสย่อยที่คุณสร้างไว้แล้วในไฟล์ด่วนแยกต่างหาก (อาจไม่ถูกต้อง 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. ไปที่ storyboard -> เลือก viewController ของคุณ -> เลือกตารางของคุณ
  2. เลือกคุณสมบัติ "Style" ในตัวสร้างอินเทอร์เฟซ
  3. เลือก "จัดกลุ่ม"
  4. เสร็จแล้ว

0

หากคุณมี TableView หนึ่งตารางสำหรับตารางเพิ่มเติมและตารางหนึ่งตารางนี้ถูกจัดกลุ่มและอีกตารางหนึ่งธรรมดาเกินกว่าที่คุณจะจำลองสไตล์ธรรมดาด้วยฟังก์ชันจาก 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


-28
self.tableView.style = UITableViewStyleGrouped

แก้ไข:

สันนิษฐานว่านี่เป็นคุณสมบัติการอ่าน / เขียน ในกรณีนี้คุณสามารถทำตามคำแนะนำของ Dimitris และตั้งค่าสไตล์เมื่อคุณสร้างอินสแตนซ์คอนโทรลเลอร์หรือ (ถ้าคุณใช้ XIB) คุณสามารถตั้งค่าผ่าน IB ได้


ขอบคุณสำหรับการตอบกลับ. ฉันไม่ได้ใช้ XIB ฉันเป็นตัวควบคุมแท็บที่มีมุมมองย่อยซึ่งเป็นคลาสที่ฉันกำหนดเอง ไม่แน่ใจว่าฉันจะวางการเรียก initWithStyle ได้ที่ไหนฉันไม่ได้ทำ TableView init มันทำโดยตัวควบคุมแท็บ การเปลี่ยน initWithStyle ใน TableViewController ดูเหมือนจะไม่ได้ผล
nevan king

ในฐานะที่เป็นดิมิทกล่าวว่าถ้าคุณไม่ได้ใช้ XIB คุณจะต้อง init'ing UITableViewController ที่ไหนสักแห่ง นั่นคือที่ที่คุณต้องการใช้ initWithStyle: call
วาด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.