2012-06-27 41 views
9

Tôi đang sử dụng đoạn mã từ Tito để thêm một nút tùy chỉnh để thanh tab của tôi: https://github.com/tciuro/CustomTabBarLàm thế nào để ẩn nút thanh tab tùy chỉnh khi hidesBottomBarWhenPushed là "TRUE"

(subclassing UITabBarController và thêm một nút tùy chỉnh sử dụng

// .. created a UIButton *button 
[self.view addSubview:button]; 

)

này hoạt động tốt với ứng dụng kịch bản của tôi dựa trên ngoại trừ trường hợp của một subview trong một bộ điều khiển chuyển hướng với tùy chọn "Ẩn thanh dưới cùng trên đẩy" được kích hoạt. Điều này ẩn thanh tab như đã hứa, nhưng không phải nút tùy chỉnh. Có vẻ như nút sẽ được thêm làm chế độ xem phụ vào thanh tab? Tôi đã thử mã xấu xí này mà thậm chí không làm cho nút hiển thị:

for(UIView *view in self.view.subviews) 
{ 
    if([view isKindOfClass:[UITabBar class]]) 
    { 
     [view addSubview:button]; 
     break; 
    } 
} 

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

UPDATE: Giải pháp của tôi: Trong ApplicationDelegate của tôi xác định các phương pháp sau, mà tôi gọi bất cứ khi nào cần thiết trong các phương pháp viewWillAppear hoặc viewWillDisappear:

-(void)hideCenterButton:(BOOL)animated 
{ 
    if(animated){ 

    [UIView animateWithDuration:0.3 
          delay:0.0f 
         options:UIViewAnimationCurveLinear 
        animations:^{ 
         CGRect frame = self.centerButton.frame; 
         frame.origin.x = -100; 
         self.centerButton.frame = frame; 
        } 
        completion:^(BOOL finished){ 
        }]; 
    } 
} 

-(void)showCenterButton:(BOOL)animated 
{ 
    if(animated){ 

    [UIView animateWithDuration:0.35 
          delay:0.0f 
         options:UIViewAnimationCurveLinear 
        animations:^{ 
         CGRect frame = self.centerButton.frame; 
         frame.origin.x = (self.view.superview.frame.size.width/2) - (self.centerButton.frame.size.width/2); 
         self.centerButton.frame = frame; 
        } 
        completion:^(BOOL finished){ 
        }]; 
    } 
} 

tôi đã phải thiết lập thời gian của phim hoạt hình đến 0,35 s để có được hiệu ứng mượt mà trong sự hài hòa với thanh tab.

+0

Hey, 'UIViewAnimationCurveLinear' sẽ ném một cảnh báo, bạn nên sử dụng' UIViewAnimationOptionCurveLinear' để thay thế. – abriggs

+1

Sau một số thử nghiệm, có vẻ như tùy chọn hình ảnh động tự nhiên nhất là 'UIViewAnimationOptionCurveEaseInOut' – abriggs

+0

Tôi đã thử nghiệm mã của bạn và nó hoạt động, nhưng các nút trở lại đằng sau những thanh tab, giải pháp nào cho vấn đề này? – xeravim

Trả lời

0

Tôi nghĩ có 2 cách bạn có thể thực hiện được với điều này.

1) cố gắng đưa nút vào chế độ xem phía trên trình điều khiển chế độ xem trên cùng cũ và thanh tab BUT bên dưới trình điều khiển chế độ xem trên cùng mới được đẩy.

2) tắt nút khi bộ điều khiển chế độ xem mới được đẩy.

Việc đầu tiên sẽ yêu cầu mucking với phân cấp chế độ xem độc quyền iOS không có giấy tờ, không được hỗ trợ và có thể thay đổi bất cứ lúc nào.

Thứ hai sẽ là vấn đề khiến hoạt ảnh xuất hiện đủ mượt để người dùng của bạn không nhận thấy. Nó không hoàn toàn là vấn đề hành xử hoàn hảo, chỉ xuất hiện một cách thích hợp.

Cá nhân tôi sẽ đề xuất hoạt ảnh của nút biến mất (animate là alpha thành 0) và xuất hiện lại dựa trên nếu bộ điều khiển chế độ xem nằm trên thanh tab xuất hiện hoặc biến mất.

Các hình ảnh động cho một hướng là (Tôi tin) 0,3 giây. Nếu nút nằm ở giữa thanh tab, bạn có thể muốn nó ẩn khi bộ điều khiển hoạt ảnh trong chế độ xem đạt đến nó (nếu không sớm hơn) để có thể sử dụng một cái gì đó từ 0,1 đến 0,15 giây để tạo hiệu ứng.

Bây giờ điều này không làm cho nút hoạt động chính xác giống như thanh tab, nhưng với độ nhanh của quá trình chuyển đổi quá ngắn, nó sẽ không thực sự đáng chú ý đối với người dùng.

Bây giờ chỉ cần để cung cấp một câu hỏi để bạn có thể tự hỏi mình. Tại sao bạn cần phải đẩy một bộ điều khiển xem chồng lên thanh tab? Tại sao điều đó lại hấp dẫn/cần thiết hơn là trình bày một bộ điều khiển xem phương thức? Nếu bạn mạnh mẽ có thể tranh luận về nó, hãy giữ nó và chúc may mắn, nếu nó không cần thiết, bạn có thể đạt được kinh nghiệm mà bạn muốn với một bộ điều khiển xem phương thức.

+0

Cảm ơn các đề xuất của bạn. Tôi đã chọn giải pháp thứ hai của bạn bằng cách xác định hai hàm trong ủy nhiệm ứng dụng của tôi. Xem cập nhật của tôi – bjoern

+0

Được thực hiện tốt, tôi thích giải pháp của bạn theo đề xuất của tôi. – NSProgrammer

0

Kiểm tra this một để đặt nút trên UITabBar. Xem liệu nó có hoạt động sau với hidesBottoBarWhenPushed hay không.

+0

thanx, nhưng điều đó không giúp được gì. Giải pháp tại https://github.com/tciuro/CustomTabBar thực sự là phần mở rộng cốt truyện của liên kết nổi tiếng mà bạn đã đăng. – bjoern

1

Một cách dễ dàng để xử lý việc này là tạo một phiên bản của nút trong tệp .h của tệp của bạn.

UIButton *customTabButton; 

Khi gọi thanh ẩn ở dưới cùng trên đẩy, hãy đặt thuộc tính nút thành ẩn và đặt lại ở chế độ xem khác nếu thanh dưới cùng hiển thị.

shareFbButton.hidden=YES; 

Bạn có thể kiểm tra điều này là viewDidLoad của tất cả các tập tin và đặt dòng mã này nếu cần thiết để đảm bảo bạn đang hiển thị các nút và ẩn các nút trên tất cả các trang bạn cần.

if(self.tabBarController.tabBar.isHidden){ 

// set or reset the custom button visibility here 
} 

Đây là một cách.

+0

vui lòng giải thích cách xóa bỏ chế độ xem phụ đang làm phiền ui. trước khi một màn hình được đẩy ra khỏi nút đi mất tích và trông xấu. tự hỏi làm thế nào các ứng dụng khác đang làm điều này. – carbonr

+0

Tôi không chắc chắn những gì bạn đang yêu cầu tôi, bạn có thể vui lòng rephrase câu hỏi? – LostPuppy

1

Tại sao bạn không làm cho nút phần của thanh tabbar của bạn.

tabBarController.tabBar.addSubView(yourButton) 

mọi thứ sẽ được giải quyết. chúc mừng!

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