2012-01-06 23 views
5

Khi tôi tạo chế độ xem bảng tĩnh và đặt nó trong bộ điều khiển chế độ xem bình thường, tôi nhận được lỗi cho biết chế độ xem bảng tĩnh phải nằm trong UITableViewController.iOS Cách thêm STATIC UITableView và chế độ xem khác vào cùng một bộ điều khiển xem

Điều tôi muốn là chế độ xem trên iPad có chế độ xem bảng tĩnh chiếm hầu hết màn hình, nhưng UIView tiêu chuẩn bên dưới nó luôn hiển thị và có một vài nhãn mà tôi cập nhật dựa trên nội dung chế độ xem bảng.

Có cách nào để sử dụng một UITableViewController và có tableView không được toàn màn hình để tôi có thể thêm một subview vào nó trong một Storyboard?

Nếu không, nó có thể được thực hiện trong mã không?

Mọi mẹo sẽ được đánh giá cao!

Trả lời

0

Câu trả lời thực sự là tạo bộ điều khiển vùng chứa tùy chỉnh.

Ví dụ: bạn có thể có chế độ xem bảng tĩnh bên trong bộ điều khiển điều hướng. Vì vậy, bạn cần phải tạo một lớp container, giống như một bộ điều khiển nav hoặc bất kỳ điều khiển nào của bạn, và thêm bộ điều khiển xem bảng tĩnh vào đó.

1

Bạn có thể đạt được hiệu ứng tương tự bằng cách sử dụng UITableViewController và tĩnh UITableView. Tạo chế độ xem bạn muốn ở cuối bảng và đặt thuộc tính tableFooterView trên UITableView làm chế độ xem đó. Điều này có thể được thực hiện bằng cách kéo một đối tượng UIView ra khỏi thư viện và thêm nó vào cuối chế độ xem bảng (bạn sẽ thấy vùng dưới cùng nổi bật màu xanh lam để biết bạn đang làm đúng). Bạn có thể phải điều chỉnh nội dung insets để làm cho nó hiển thị như thế nào bạn muốn.

+0

Chân trang chỉ hiển thị khi bạn ở dưới cùng của bảng, đúng không? Tôi cần chế độ xem này luôn hiển thị. – lnafziger

+0

Giải pháp tuyệt vời! Bạn có thể thêm một UIView bình thường trước hoặc sau một phần xem bảng mà về cơ bản giống như tích hợp nó theo cách khác và nó thực sự hoạt động. –

1

Ô tĩnh Bảng nhìn phải có kiểu UITableViewController, nhưng bạn có thể đạt được hiệu ứng tương tự bằng cách sử dụng ViewController với TableView (hoặc 2) và tự chăm sóc phương thức cellForRowAtIndexPath cho TV bạn muốn là "Ô tĩnh" . Chỉ cần chuyển đổi IndexPath.section và .row và xây dựng ô theo cách bạn muốn. Mã hóa chắc chắn hơn, nhưng bạn sẽ có được hiệu ứng tương tự và linh hoạt hơn nếu bạn không muốn thực hiện nó theo cách tĩnh của Apple.

+0

Vâng, thật không may, nó là rất nhiều hàng vì vậy tôi đang cố gắng tìm một cách tốt hơn! – lnafziger

2

Tôi không chắc chắn nếu nó hoạt động, nhưng bạn có thể muốn thử phương pháp này quá:

  1. Tạo một UIViewController, ví dụ BaseViewController (cả một lớp và trong bảng phân cảnh)
  2. Tạo một UITableViewController ví dụ: MyStaticTableViewController (chỉ trong Storyboard và thêm một mã định danh vào nó)
  3. Trong Storyboard, thêm một thể hiện của UIView với các kích thước thích hợp vào BaseViewcontroller của bạn, ví dụ: myStaticTableView.
  4. Lập trình, thêm chế độ xem của MyStaticTableViewController vào myStaticTableView.
6

Những gì bạn cần là một thường lệ UITableViewController (vì vậy bạn nhận được tất cả hành vi ô tĩnh) và sau đó là chế độ xem con của chế độ xem bảng, nhưng được quản lý sao cho luôn luôn ở cuối màn hình. Apple đã chứng minh điều này như WWDC. Đây là những gì tôi làm (trong ví dụ của tôi, tôi có một số UIDatePicker mà tôi luôn muốn neo ở dưới cùng):

Trong viewDidLoad, tạo chế độ xem của bạn và thêm nó làm chế độ xem phụ của chế độ xem bảng. Đặt nó ở dưới cùng của bảng xem.

[self.tableView addSubview:self.datePicker]; 
[self updateDatePickerBounds]; 

Thực hiện scrollViewDidScroll để bạn có thể buộc cái nhìn của bạn vào dưới cùng của màn hình bao giờ hết thời gian xem bảng cuộn:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    // Keep the date picker floating above the table view, anchored to the bottom of the view 
    [self updateDatePickerBounds]; 
} 

Và sau đó thực hiện một chức năng mà vị trí quan điểm của bạn một cách chính xác:

- (void) updateDatePickerBounds 
{ 
    // Keep the date picker floating above the table view, anchored at the bottom 
    CGRect tableBounds = self.tableView.bounds; 
    CGRect pickerFrame = self.datePicker.frame; 
    pickerFrame = CGRectMake(tableBounds.origin.x, 
          tableBounds.origin.y + CGRectGetHeight(tableBounds) - CGRectGetHeight(pickerFrame), 
          tableBounds.size.width, 
          pickerFrame.size.height); 
    self.datePicker.frame = pickerFrame; 
} 

Cuối cùng, nếu bạn không muốn xem bảng dưới chế độ xem dưới cùng của mình, chỉ cần đặt chế độ xem bảng là contentInset để khớp với tám quan điểm của bạn.

Tôi cũng gọi phương thức updateDatePickerBounds của mình từ viewWillAppear. Tôi quên lý do tại sao tôi phải làm điều đó.

+2

Vâng, đó là những gì tôi đang nói đến - một UITableViewController được thiết lập với các ô tĩnh. Bạn có thể thả nổi một chế độ xem phía trên chế độ xem bảng bằng cách sử dụng kỹ thuật tôi đã mô tả. Tôi đã thực hiện nó nhiều lần. –

+0

CẬP NHẬT: Trên thực tế, nơi tốt hơn để gọi updateDatePickerBounds là trong viewDidLayoutSubviews. Sau đó, bạn không cần phải ghi đè scrollViewDidScroll. viewDidLayoutSubviews cũng được gọi trong khi xoay thiết bị, vì vậy mọi thứ sẽ được cập nhật trong trường hợp đó. –

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