2012-01-19 25 views
5

Tôi đang sử dụng iOS 5 với Bảng phân cảnh. My UITabBar được tạo bằng Trình tạo giao diện. Tôi có hai mục tương tự trong số TabBar của tôi là cùng một danh sách, chỉ với các loại mục khác nhau trong đó. Những gì tôi đã làm, nhưng có vẻ lạ với tôi, là thiết lập một "Tag" khác nhau cho mỗi UITableView và trong viewDidLoad, và sau đó gán đúng loại theo Tag.UITabBar - hai chế độ xem (nib) cùng một Lớp bằng cách sử dụng Storyboard

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if (self.tableView.tag == 1) 
    { 
     type = @"lent"; 
    } 
    else if (self.tableView.tag == 2) 
    { 
     type = @"borrowed"; 
    } 
} 

Bất kỳ cách nào tốt hơn để làm điều đó? Tôi không tạo mã số UITabBar của mình, vì vậy, AppDelegate của tôi khá trống! Loại tôi đặt chỉ là một thuộc tính trong một trong các thực thể dữ liệu cốt lõi của tôi, trên danh sách tôi có các mục vay và mặt khác tôi có các mục cho vay, nhưng chúng là cùng một thực thể.

Trả lời

3

Bạn có thể hiển thị loại dưới dạng thuộc tính trên bộ điều khiển chế độ xem chung và đặt mục khi mục thanh tab có liên quan được chọn (tabBarController:didSelectViewController: từ giao thức UITabBarControllerDelegate - ứng dụng của bạn sẽ là đại biểu điều khiển thanh tab).

Bạn sẽ thiết lập điều này như sau. Tuyên bố rằng ủy nhiệm ứng dụng của bạn tuân theo giao thức UITabBarControllerDelegate, sau đó đặt nó làm đại biểu của trình điều khiển thanh tab (bạn phải thực hiện điều này bằng mã vì ủy nhiệm ứng dụng không có sẵn để kết nối trong bảng phân cảnh). Trong applicationDidFinishLaunching của bạn, thêm những điều sau đây trước khi bạn quay trở lại YES:

UITabBarController *tbc = (UITabBarController*)self.window.rootViewController; 
tbc.delegate = self; 

Sau đó, thực hiện các phương pháp đại biểu sau đây:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 

    switch (tabBarController.tabBar.selectedItem.tag) 
    { 
     case 1: 
      viewController.property = @"propertyA"; 
      break; 
     case 2: 
      viewController.property = @"propertyB"; 
      break; 
    } 

    NSLog(@"view controller is %@",viewController); 

} 

Bạn sẽ cần phải cast biến viewController để xem lớp điều khiển thực tế của bạn, và cũng chỉ định các thẻ có liên quan cho mục thanh tab của mỗi bộ điều khiển chế độ xem.

+0

Hm, giải pháp có vẻ đẹp! Vì vậy, tôi chỉ cần đặt tabBarController: didSelectViewController: trong ủy nhiệm ứng dụng của tôi? Sẽ cung cấp cho một shot vào sáng ngày mai và sẽ giữ cho bạn được đăng. Cảm ơn! – allaire

+0

Bạn cũng sẽ cần phải đặt đại biểu ứng dụng làm đại biểu của trình điều khiển thanh tab và tuyên bố rằng ứng dụng của bạn ủy nhiệm phù hợp với giao thức. – jrturton

+0

Bạn có một phút để chia sẻ một đoạn mã nhỏ, những gì tôi đã thử không hoạt động:/ – allaire

1

Những gì bạn có ở đó sẽ hoạt động tốt. Một tùy chọn khác sẽ là có một lớp siêu phổ biến UIViewController có tất cả các chức năng và sau đó phân lớp lớp cơ sở đó và cung cấp việc triển khai viewDidLoad đặt loại thích hợp. Sau đó, trong giao diện Builder bạn có thể thiết lập các bộ điều khiển xem UITabBar như subtypes thích hợp của bạn.

Kết quả sẽ giống nhau, nhưng có thể rõ ràng hơn một chút trong IB những gì đang diễn ra vì bạn không phải dựa vào việc ghi nhớ ý nghĩa của từng thẻ số.

+0

Cảm ơn đề xuất :) – allaire

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