2009-10-23 22 views
7

Tôi gặp sự cố khi tạo UIView (trong Trình tạo giao diện) có chứa UITableView với một số đối tượng khác, chẳng hạn như UIButton hoặc UILabel. UITableView luôn chiếm dung lượng tối đa trong UIView, bất kể kích thước của chính đối tượng UITableView. Chủ sở hữu tệp là UITableViewController tiêu chuẩn.UITableView sử dụng tất cả không gian có sẵn trong Interface Builder

+1

Bạn có thể đổi tên điều này thành một cái gì đó như: "UITableView có sử dụng tất cả không gian có sẵn trong Bộ dựng giao diện" không? Tiêu đề hiện tại không phải là rất mô tả – Casebash

Trả lời

12

Dưới đây là cách thực hiện điều này một cách dễ dàng:

1) Tạo bộ điều khiển xem bảng bằng xib.

2) Thay đổi loại được kế thừa trong tệp .h từ UITableViewController, thành UIViewController.

3) Thêm giao thức UITableViewDataSource, UITableViewDelegate vào tệp .h.

4) Mở xib, thêm chế độ xem.

5) kéo chế độ xem bảng trong xib dưới chế độ xem, thay đổi kích thước như mong muốn.

6) Dây thuộc tính "xem" của Chủ sở hữu tệp vào Chế độ xem thay vì UITableView. Nguồn dữ liệu và các thuộc tính ủy nhiệm của dạng xem bảng vẫn phải được nối với Chủ sở hữu tệp.

7) (tùy chọn) nếu bạn muốn có thể tải lại hoặc truy cập vào bảng bên ngoài các phương thức ủy quyền của bảng điều khiển xem trong bảng, tạo UITableView * IBOutlet có tên "myTable" hoặc tương tự và dây bảng trong IB để điều đó.


Một cách tiếp cận thay thế là để thực hiện một UIViewController mới với xib, thêm một bảng cho xib, dây nguồn dữ liệu/đại biểu cho chủ sở hữu của tập tin, và thực hiện một lớp UITableViewController mới mà bạn sử dụng để sao chép các phương pháp từ thành bộ điều khiển xem của bạn, sau đó xóa.

+1

Đây là cách phù hợp để thực hiện.Từ tài liệu của Apple: "Nếu chế độ xem được quản lý là chế độ xem tổng hợp trong đó chế độ xem bảng là một trong nhiều bản xem phụ, bạn phải sử dụng lớp con tùy chỉnh của UIViewController để quản lý chế độ xem bảng (và các chế độ xem khác). Không sử dụng UITableViewController đối tượng bởi vì lớp điều khiển này kích thước khung nhìn bảng để lấp đầy màn hình giữa thanh điều hướng và thanh tab (nếu có). " – bpapa

+0

Ngoài ra một bước tôi nghĩ rằng bạn cần phải thêm Kendall - ông sẽ phải rõ ràng thêm tableView như là một tài sản của lớp UIViewController của mình và làm cho nó một IBOutlet. – bpapa

+0

Kendall/bpapa - Cảm ơn sự giúp đỡ của bạn. Sử dụng câu trả lời kết hợp của bạn, tôi đã có thể giải quyết vấn đề của mình. Một điều về nhận xét cuối cùng của bpapa - tôi đã phải tạo một thuộc tính được gọi là "tableView" trong lớp UIViewController của tôi; tuy nhiên, nó dường như hoạt động ngay cả khi tôi không khai báo nó như là một IBOutlet hoặc kết nối IBOutlet với chính tableView thực tế. Tôi đã không hoàn toàn tìm ra lý do tại sao nó hoạt động ... :-) –

0

Thật không may, việc tạo UITableView trong Trình tạo giao diện (IB) là rất có vấn đề đối với tôi. Tôi đã gặp phải những vấn đề tương tự như bạn với tư cách là một nhà phát triển bắt đầu và, sau nhiều thất vọng, cuối cùng lại từ bỏ IB cho UITableViews.

Giải pháp tốt nhất cho tôi là chỉ cần triển khai UITableViewController (và UINavigationController mà bạn sử dụng làm tiêu đề) theo lập trình. Một khi bạn tìm ra toàn bộ mô hình Model-View-Controller, nó thực sự khá đơn giản.

Một số nguồn lực tốt để đối phó với họ có thể lập trình được tìm thấy trong tài liệu hướng dẫn của Apple với các tên:

"bảng Xem Hướng dẫn lập trình cho iPhone OS"
"View Controller Hướng dẫn lập trình cho iPhone OS"

+1

Nhìn vào câu trả lời của Kendall và bình luận của tôi. Kể từ 3.0, Apple đã dọn dẹp Tài liệu để giải thích rõ hơn về nó. Sử dụng cách tiếp cận này, bạn vẫn có thể thực hiện các lần xem bảng trong Trình tạo giao diện. – bpapa

+0

Tốt để biết, cảm ơn. –

Các vấn đề liên quan