Làm cách nào để đặt UITableView thành kiểu được nhóm


89

Tôi có một UITableViewControllerlớp con với các phần. Các phần được hiển thị với kiểu mặc định (không có góc tròn). Làm cách nào để đặt kiểu TableView thành nhóm trong mã? Tôi không sử dụng Trình tạo giao diện cho việc này, vì vậy tôi cần một cái gì đó như

[self.tableView setGroupedStyle]

Tôi đã tìm kiếm trên Stack Overflow, nhưng không thể tìm ra câu trả lời.


Phiên bản Swift: Liên kết
Juan Boero

Câu trả lời:


107

Nếu tôi hiểu ý bạn, bạn phải khởi tạo bộ điều khiển của mình với phong cách đó. Cái gì đó như:

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

3
Như đã nói nó không phải là tài sản có thể thay đổi được. Một nhóm luôn được nhóm lại.
Corey Floyd

Đây không phải là một câu trả lời đúng, nó không giải quyết được vấn đề có một lớp con UITableViewController. Nếu bạn kế thừa UITableViewController, bạn phải ghi đè phương thức khởi tạo không tạo một UITableView hoặc UITableViewController khác.
Mikael

Bạn sẽ làm điều này như thế nào nếu đó là một bộ điều khiển lớp con, như đã nêu trong câu hỏi?
Ethan Zhao

130

Bạn có thể làm như sau:

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

Swift 3:

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

12
ĐÂY LÀ GIẢI PHÁP THỰC SỰ! CẢM ƠN. Câu trả lời được chấp nhận là sai, ít nhất là đối với OS 3.0+
Duck

4
Xin lưu ý rằng có một lỗi đánh máy trong giải pháp được chấp nhận. Tôi đã sửa nó bây giờ. Cả hai câu trả lời đều phù hợp với tôi, nhưng chúng tạo ra những điều khác nhau. Câu trả lời này là a UITableView, câu trả lời được chấp nhận là a UITableViewController.
nevan king

3
Trên thực tế, câu trả lời được chấp nhận là sai lệch. Vui lòng đọc những gì OP đã nói "Tôi có một lớp con UITableViewConotroller". Câu trả lời được chấp nhận CHỈ cung cấp cho bạn một UITableViewController đơn giản; Nếu không biết chi tiết thì không thể giải quyết vấn đề người dùng liên quan đến lớp con. Câu trả lời này và sử dụng self.myTable có lẽ sẽ tốt hơn, IMHO.
Mèo Feloneous

Điều này cũng hoạt động với các ràng buộc trên iOS8 (không biết về iOS7) ... chỉ cần khởi tạo với một khung CGRectZerocùng với kiểu tableview của bạn và sau đó thêm các ràng buộc của bạn và bạn sẽ có được kiểu phù hợp cùng với các ràng buộc của mình.
Glen Selle

20

Tôi cung cấp cho bạn giải pháp của tôi, tôi đang làm việc ở "chế độ XIB", đây là mã của một lớp con của UITableViewController:

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

6
Cảnh báo trước giải pháp này - nếu điều này nằm dưới điều hướngController trong NIB, nó sẽ mất tham chiếu đó và khiến bạn thực sự bối rối.
Jesse Millikan

14

Mã bên dưới Làm việc cho tôi, tôi cũng đang sử dụng lớp UITableview

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

     if (self)
    {

     }
    return self;
}

1
Đây là giải pháp phù hợp cho những người sử dụng lớp con của UITableViewController. Cảm ơn!
Chad Pavliska

9

Nếu bạn đang kế thừa UITableViewController, bạn có thể init tableView lại.

Mục tiêu C:

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

Nhanh:

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

6

Thiết lập đó không khó như đã đề cập trong câu hỏi. Thực ra nó khá đơn giản. Hãy thử điều này trên bảng phân cảnh.

nhập mô tả hình ảnh ở đây


Nếu bạn đã có tableView như một phần của cài đặt TableViewController thì theo cách này là tốt nhất. Câu trả lời khác tập trung hơn vào instantiating một tableView mới, vv
Karthik Kannan

3

Swift 4

Sử dụng TableView bình thường

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

Sử dụng TPKeyboardAvoidingTableView

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

3

Swift 4+:

let myTableViewController = UITableViewController(style: .grouped)

2

Đối với thiết lập kiểu được nhóm trong chính ui: -Chọn TableView sau đó thay đổi "kiểu" (trong trình kiểm tra thuộc tính)) từ đơn giản thành Grouped.


2

Bạn cũng có thể làm điều này nếu bạn muốn sử dụng nó trên một lớp con mà bạn đã tạo trong một tệp nhanh riêng biệt (có thể không đúng 100% nhưng hoạt động)

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

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

Bây giờ trong appdelegate.swift, bạn có thể gọi:

let settingsController = SettingsViewController(style: .Grouped)

1

Bạn cũng có thể làm điều này bằng cách sử dụng bảng phân cảnh / XIB

  1. Đi tới bảng phân cảnh -> Chọn chế độ xem của bạn Bộ điều khiển -> Chọn bảng của bạn
  2. Chọn thuộc tính "Kiểu" trong trình tạo giao diện
  3. Chọn "Đã nhóm"
  4. Làm xong

0

Nếu bạn có một TableView cho nhiều bảng hơn và một trong các bảng này được nhóm lại và một bảng khác đơn giản, thì bạn có thể mô phỏng kiểu đơn giản bằng hàm từ UITableViewDelegate:

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

0

nhanh chóng 4

nếu bạn không muốn sử dụng bảng phân cảnh, điều này có thể hữu ích.

bạn có thể thêm dạng xem bảng và đặt thuộc tính trong một bao đóng:

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
    }()

sau đó thêm vào subview và thiết lập các ràng buộc.


-5

Bạn cũng có thể cố gắng làm cho màu của đường phân tách rõ ràng có thể tạo ra hiệu ứng kiểu được nhóm:

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

Các phần sẽ không thu gọn theo cách này.
brduca 22/02

-11

Bạn có thể dùng:

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

-27
self.tableView.style = UITableViewStyleGrouped

BIÊN TẬP:

Đã giả định đây là thuộc tính đọc / ghi. Trong trường hợp đó, bạn có thể làm theo lời khuyên của Dimitris và đặt kiểu khi bạn khởi tạo bộ điều khiển hoặc (nếu bạn đang sử dụng XIB), bạn có thể đặt nó qua IB.


Cảm ơn vi đa trả lơi. Tôi không sử dụng XIB, tôi có bộ điều khiển tab với chế độ xem phụ là lớp tùy chỉnh của tôi. Không chắc tôi có thể đặt lệnh gọi initWithStyle ở đâu, tôi không tìm init TableView, nó được thực hiện bởi bộ điều khiển tab. Thay đổi initWithStyle trong TableViewController dường như không hoạt động.
nevan king

Như dimitris đã nói, nếu bạn không sử dụng XIB, bạn phải đang cài đặt UITableViewController ở đâu đó . Đó là nơi bạn muốn sử dụng initWithStyle: gọi.
hòa vào
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.