2013-01-03 19 views
11

Tôi có một dự án có nút cho phép người dùng chuyển đổi giữa chế độ xem danh sách (UITableView) và chế độ xem lưới (UICollectionView) nhưng tôi không biết cách thực hiện.Cách chuyển UITableView và UICollectionView

+6

Nó không phải là tiếng Anh rất kém nhưng nó hiện là một câu hỏi không tốt. Bạn đang mắc kẹt _exactly_ gì? Bạn đã cố gắng làm gì cho đến nay? –

+0

Tôi xin lỗi @ nhưng tôi là người mới! –

Trả lời

19

Giả sử rằng bộ điều khiển của bạn có thuộc tính UITableView tên là tableView và thuộc tính UICollectionView có tên collectionView. Trong số viewDidLoad bạn cần thêm chế độ xem bắt đầu. Giả sử đó là xem bảng:

- (void)viewDidLoad 
{ 
    self.tableView.frame = self.view.bounds; 
    [self.view addSubview:self.tableView]; 
} 

Sau đó, trong nút gọi lại của bạn, trao đổi các quan điểm hiện:

- (void)buttonTapped:(id)sender 
{ 
    UIView *fromView, *toView; 

    if (self.tableView.superview == self.view) 
    { 
     fromView = self.tableView; 
     toView = self.collectionView; 
    } 
    else 
    { 
     fromView = self.collectionView; 
     toView = self.tableView; 
    } 

    [fromView removeFromSuperview]; 

    toView.frame = self.view.bounds; 
    [self.view addSubview:toView]; 
} 

Nếu bạn muốn có một hình ảnh động ưa thích, bạn có thể sử dụng +[UIView transitionFromView:toView:duration:options:completion:] thay vì:

- (void)buttonTapped:(id)sender 
{ 
    UIView *fromView, *toView; 

    if (self.tableView.superview == self.view) 
    { 
     fromView = self.tableView; 
     toView = self.collectionView; 
    } 
    else 
    { 
     fromView = self.collectionView; 
     toView = self.tableView; 
    } 

    toView.frame = self.view.bounds; 
    [UIView transitionFromView:fromView 
         toView:toView 
         duration:0.25 
         options:UIViewAnimationTransitionFlipFromRight 
        completion:nil]; 
} 
+0

cảm ơn! Nhưng tôi có thể sử dụng ViewController nào? TableViewController hoặc CollectionViewController. Làm thế nào tôi có thể sử dụng TableViewDelegate và Datasource trong một lớp outsite (không ViewController)? –

+0

Chỉ cần sử dụng UIViewController bình thường và thêm cả hai loại chế độ xem đó làm thuộc tính. Hoặc, nếu bạn muốn giữ logic cho hai khung nhìn riêng biệt, bạn có thể tạo một UITableViewController và một UICollectionViewController và sử dụng các khung nhìn của chúng thay vì các thuộc tính của bộ điều khiển chính. – Simon

+0

Trong trường hợp quan điểm của bạn đã là một phần của cấu trúc phân cấp khung nhìn (ví dụ: bằng cách thêm vào xib/storyboard), bạn phải chuyển 'UIViewAnimationOptionShowHideTransitionViews' làm tham số tùy chọn trong phương thức' + transitionFromView: ToView: duration: options: completion: ' . – MrBr

2

Một cách khác để giải quyết vấn đề này là có một đơn UICollectionView, trong đó bạn có thể chuyển đổi triển khai UICollectionViewFlowLayout tùy thuộc vào chế độ bạn muốn.

Để chuyển đổi từ UITableView thành UICollectionView, có rất nhiều hướng dẫn trực tuyến, ví dụ: this.

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