2011-07-25 46 views
7

Tôi đã thử mã sau đây, trong một nỗ lực để có được chế độ xem tùy chỉnh hiển thị phía trên bộ điều khiển thanh tab (điều này xảy ra để có bộ điều khiển điều hướng trong tất cả các tab của nó).Thêm chế độ xem tùy chỉnh ở trên bộ điều khiển thanh tab/bộ điều khiển điều hướng?

Vấn đề là nó chồng lên trên thanh điều hướng và tôi muốn thanh điều hướng được di chuyển xuống.

Tôi đã thử đặt khung của bộ điều khiển thanh tab, nhưng điều đó không hề di chuyển.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
    // Override point for customization after application launch. 
    // Add the tab bar controller's current view as a subview of the window 
    //self.tabBarController.view.frame = CGRectMake(0, 62, 320, 320); 
    self.window.rootViewController = self.tabBarController; 

    [self.window makeKeyAndVisible]; 

    // setting up the header view 
    self.headerView = [[HeaderView alloc] initWithFrame:CGRectMake(0, 20, 320, 42)]; 
    [self.window addSubview:self.headerView]; 

    // setting up facebook stuff 
    AgentSingleton *agentSingleton = [AgentSingleton sharedSingleton]; 
    agentSingleton.facebook = [[Facebook alloc] initWithAppId:APP_ID]; 

    return YES; 
} 

Bất kỳ ý tưởng nào?

Trả lời

7

Không thực sự có cách nào tốt để thực hiện việc này. Các subviews khác nhau của UINavigationController và UITabBarController đều là private, và cố gắng gây rối với chúng có khả năng không hoạt động chính xác. Và Apple không cung cấp cho chúng tôi các công cụ để tạo bộ điều khiển xem "container", vì vậy bạn không thể dễ dàng nhúng UINavigationController/UITabBarController bên trong một trình điều khiển chế độ xem khác hoặc tự tạo lại UINavigationController/UITabBarController.

Đặt cược tốt nhất của bạn có thể là để tiếp tục và thử tạo bộ điều khiển chế độ xem "vùng chứa" của riêng bạn và xử lý một số điều không hoạt động đúng. Cụ thể, bộ điều khiển xem parentViewController của bộ điều khiển xem sẽ trả về 0 và do đó nhiều thứ khác trên bộ điều khiển chế độ xem hoặc bộ điều khiển phụ sẽ bị hỏng (ví dụ: thuộc tính interfaceOrientation sẽ sai, presentModalViewController:animated: có thể không hoạt động đúng). Những thứ khác có thể bị hỏng. Hoặc bạn có thể đợi cho đến khi một số phiên bản iOS trong tương lai thực sự có hỗ trợ cho chúng tôi để tạo bộ điều khiển xem vùng chứa (nếu có), và sau đó chỉ hỗ trợ phiên bản đó và lên.

0

Bạn có ý nghĩa ở trên như ở dọc trên phần còn lại của nội dung không?

Hoặc cao hơn khi ngồi trên đầu nội dung còn lại?

Hiện tạiModalViewController: hoạt ảnh: nhưng tôi nghi ngờ đó là những gì bạn muốn?

+0

Theo chiều dọc phía trên phần còn lại của nội dung. – xil3

+0

Tôi đã đặt nó ở trên cùng, nhưng tại thời điểm nó bao gồm bộ điều khiển điều hướng. Tôi cần phải đẩy xuống bộ điều khiển thanh tab bằng cách nào đó ... – xil3

+0

Sử dụng modalViewController mà chế độ xem nền là chế độ xem trên cùng trên bộ điều khiển chế độ xem hiện tại (chẳng hạn như view.superview.superview.superview cho đến khi không có) – dwbrito

7

Bạn có thể addSubview đơn giản để cửa sổ:

[self.view.window addSubview:myView]; 
+0

Đối với tôi, tự .view.window là null để thêm một subview không có hiệu lực. – Lewis42

+0

@ Lewis42 Không nói rằng đây là cách tiếp cận đúng nhưng bên trong viewDidLoad cửa sổ phương pháp bất động sản sẽ luôn luôn là số không. Điều này cần được thực hiện bên trong phương thức viewDidAppear. –

0

Tôi không thể bình luận vì vậy tôi sẽ viết những dòng này vào đây để bất kỳ ai khác đi qua trang này. Câu trả lời của Borut đã bị bỏ phiếu thực sự là câu trả lời dễ dàng và chính xác hơn.

Anh ấy chỉ đơn giản là không cung cấp cho bạn hướng dẫn chính xác. Bạn cần phải thêm chế độ xem tùy chỉnh vào Cửa sổ cho ứng dụng của bạn được khai báo trong AppDelegate của bạn (trong Mono này sẽ là AppDelegate.Window.Add (myView), không trong Cửa sổ Chế độ xem hiện tại là rỗng (ví dụ: this.View .Window).

này hoạt động tốt trong Xamarin/Mono và tôi không thể hiểu tại sao nó sẽ không giống nhau cho obj-C trong mã đúng.

20

Thêm điểm đến tabBarController Xem bản thân :

[self.tabBarController.view addSubview:yourView]; 
0

Bạn có thể làm điều gì đó tương tự:

if let indeedTabBarController = self.tabBarController { 

    let buttonHeight: CGFloat = 49 // height of tab bar 
    let buttonWidth = UIScreen.main.bounds.width/3 // in case if you have 3 tabs 
    let frame = CGRect(x: 0, y: UIScreen.main.bounds.height - buttonHeight, width: buttonWidth, height: buttonHeight) 
    let button = UIButton(frame: frame) 
    button.addTarget(self, action: #selector(self.someAction), for: .touchUpInside) 

    indeedTabBarController.view.addSubview(button) 
} 
Các vấn đề liên quan