7

Tôi có một tabBarController mà tôi thêm bằng cách đặt đoạn mã sau vào:iPhone - presentModalViewController qua UITabBarItem và dismissModalViewController sạch

AppDelegate.h:

... 
    UITabBarController IBOutlet *tabBarController; 
} 

@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController; 

AppDelegate.m:

... 
    [self.window addSubview:tabBarController.view]; 
    [self.window makeKeyAndVisible]; 
    [tabBarController setDelegate:self]; 

sau đó tôi sử dụng đoạn mã sau để trình bày một phương thức quét mã vạch View Controller:

- (void)tabBarController:(UITabBarController *)tbc didSelectViewController:(UIViewController *)vc { 
     // Middle tab bar item in question. 
     if (vc == [tabBarController.viewControllers objectAtIndex:2]) { 
      ScanVC *scanView = [[ScanVC alloc] initWithNibName:@"ScanViewController" bundle:nil]; 

      // set properties of scanView's ivars, etc 

      UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:scanView]; 

      [tabBarController presentModalViewController:navigationController animated:YES]; 
      [navigationController release]; 
      [scanView release]; 
     } 
    } 

Khi nó thực sự được giới thiệu tôi nghĩ rằng phương pháp này là không bắt mắt, bởi vì khi tôi bỏ qua những cái nhìn modal Tôi đang mang trở lại chế độ xem trống.

Rất nhiều ứng dụng quét hoặc ứng dụng quét mã vạch chỉ hiển thị bộ chọn hình ảnh chẳng hạn; làm điều này khá thành công. Tôi chỉ tự hỏi loại triển khai nào họ sẽ sử dụng để đạt được hiệu quả như vậy.

Đây là một ảnh chụp màn hình của một ứng dụng gọi là Đường dẫn, trong đó có các chức năng chính xác cùng tôi sau:

alt text

Tôi cũng nhận thấy rằng trong các ứng dụng này, nếu bạn đang ở trên bất kỳ khác mục thanh tab khác với phần giữa, giả sử bạn nhấp vào mục thanh tab thể hiện chế độ xem phương thức, khi nó bị loại bỏ, nó không thực sự đưa chúng trở lại chế độ xem trống mà nó loại bỏ như bình thường, tuy nhiên tab thực mục thanh trình bày chế độ xem phương thức không bao giờ được chọn. Tôi sẽ hài lòng với loại chức năng này nếu đó là cách duy nhất để thực hiện loại hiệu ứng này.

Bất kỳ trợ giúp nào sẽ được đánh giá rất cao vì tôi đã bị kẹt trong thời gian này khá lâu. Ngoài ra tôi thậm chí không chắc chắn cho dù đó là cách đúng để đặt tất cả các mã này trong AppDelegate của tôi để cho bộ điều khiển xem được trình bày như một phương thức. Tất cả dường như, chỉ là, sai.

+1

Tôi nghĩ bạn sẽ thấy rằng ứng dụng Đường dẫn đang sử dụng triển khai bộ điều khiển thanh tab của riêng họ. nghĩa là không phải là 'UITabBarController' từ Cocoa Touch – ohhorob

Trả lời

1

Bạn không nên hiển thị chế độ xem phương thức, khi người dùng nhấp vào mục trên thanh tab.

Thay vào đó, bạn có thể hiển thị chế độ xem phương thức từ trong chế độ xem được trình bày bởi một trong các tab.

Hoặc, nếu bạn chỉ có một chế độ xem chính và chế độ xem quét bạn muốn hiển thị theo phương thức, bạn chỉ nên sử dụng nút để hiển thị chế độ xem quét từ trong chế độ xem chính của mình. Ví dụ, bạn có thể sử dụng thanh công cụ với một nút duy nhất trong thanh công cụ.

+0

Hãy xem các ứng dụng như, Đường dẫn và Chú thích cho chức năng tôi theo sau. – fuzz

+0

Xem ảnh chụp màn hình ở trên trong câu hỏi ban đầu của tôi. – fuzz

2

Khi bạn bỏ qua bộ điều khiển xem phương thức, nói với các thanh tab để chọn tab bất cứ điều gì đã được lựa chọn ban đầu .

- (void)dismissModalViewControllerAnimated:(BOOL)animated 
    { 
     // do whatever you need to do when dismissing 

     // savedTabIndex is an int ivar 
     // tabBarController is a reference, set when showing the modal view 
     [[self tabBarController] setSelectedIndex:savedTabIndex]; 
    } 

Bạn sẽ phải lưu lựa chọn thanh tab ban đầu trong biến vào lúc bắt đầu tabBarController:didSelectViewController:.

- (void)tabBarController:(UITabBarController *)tbc 
didSelectViewController:(UIViewController *)vc 
{ 
    // Save the tab bar index (if it's not the photo tab) 
    if ([tabBarController selectedIndex] != 3]) { 
     savedTabIndex = [tabBarController selectedIndex]; 
    } 
} 

Có thể có lỗi trong mã này, tôi chỉ cần nhập mã mà không cần kiểm tra.

+0

Lưu ý: Đừng quên bao gồm UITabBarControllerDelegate :) – rckehoe

1

Tôi đã tìm thấy giải pháp thực sự dễ dàng bằng cách chơi khoảng UITabBarControllerDelegate - Tôi chỉ thử tính năng này trong iOS 7.

Đầu tiên, phân lớp UITabBarController, biến nó thành riêng UITabBarControllerDelegate và tạo thuộc tính sẽ giữ tham chiếu đến tab bạn muốn khởi chạy phương thức. Trong ứng dụng của tôi, nó được gọi là tab "Bán".

@property (strong, nonatomic) UIViewController *sellTab; 

Sau đó, trong phương thức init của bạn, chỉ cần tạo bộ điều khiển chế độ xem đó và thêm nó vào tab.

_sellTab = [[UIViewController alloc] init]; 
_sellTab.title = @"Sell"; 
self.viewControllers = @[homeTab, historyTab, _sellTab, bookmarksTab, profileTab]; 

Bây giờ, đây là nơi phép thuật: ghi đè các phương thức ủy quyền của thanh tab sau đây. Mã là khá tự giải thích.

#pragma mark - Tab bar controller delegate 

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 
    return viewController != self.sellTab; 
} 

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 
{ 
    if (item == self.sellTab.tabBarItem) { 
     [self presentViewController:[[UINavigationController alloc] initWithRootViewController:[[PostAdViewController alloc] init]] animated:YES completion:nil]; 
    } 
} 

Điều này sẽ khởi chạy một phương thức, khi loại bỏ, hiển thị cùng một tab bạn đã có trước khi khởi chạy.

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