2011-09-17 24 views
6

Hiện nay, tôi đang cố gắng để kích hoạt các phương pháp 'didSelectViewController' lập trình qua đoạn mã sau:Cách kích hoạt phương thức "tabBarController: didSelectViewController:" lập trình?

self.tabController.selectedViewController 
     = [self.tabController.viewControllers objectAtIndex:NEWSTAB_INDEX]; 

Tuy nhiên, phương pháp này 'didSelectViewController' không được gọi. Làm thế nào tôi có thể kích hoạt phương thức mà không phải chọn thanh tab theo cách thủ công?

+1

N.B. hành vi của 'tabBarController: didSelectViewController:' thay đổi với iOS 3. Trong các phiên bản trước 3, phương thức này được gọi cho cả thay đổi chương trình và do người dùng thực hiện đối với bộ điều khiển chế độ xem được chọn. Trong iOS 3 trở lên, nó chỉ được gọi để phản hồi lại các thao tác của người dùng trong thanh tab và không được gọi khi mã của bạn thay đổi nội dung của thanh tab theo lập trình. – albertamg

+0

Tôi tự hỏi tại sao bạn muốn đạt được điều này. – Raptor

Trả lời

16
self.tabController.selectedIndex = NEWSTAB_INDEX; // to actually switch to the controller (your code would work as well) - not sure if this does or not send the didSelectViewController: message to the delegate 
[self.tabController.delegate tabBarController:self.tabController didSelectViewController:[self.tabController.viewControllers objectAtIndex:NEWSTAB_INDEX]]; // send didSelectViewController to the tabBarController delegate 
+0

Điều này đã hiệu quả. Tôi đã thử nghiệm! – user523234

+0

có, nó cũng phù hợp với tôi. Nhưng tại sao bạn phải làm điều đó? Trong trường hợp của tôi, UITabbarControllerDelegate là một lớp riêng biệt, NSObject và thực hiện các phương thức ủy nhiệm. Vấn đề là nếu tôi chuyển đổi tab programaticaly, các phương thức đại biểu không được gọi. Nếu bạn chuyển đổi bằng cách nhấp vào các tab, nó hoạt động. Không thể tìm ra lý do tại sao nó xảy ra. – Zsolt

+0

@Zsolt đó là cách mà đại biểu được Apple cho là (được kích hoạt trên tương tác của người dùng) và điều đó có ý nghĩa theo một cách. Khi thay đổi theo chương trình, bạn đã biết rằng nó đã thay đổi, vì vậy có thể không có điểm nào trong việc kích hoạt đại biểu trong một số trường hợp. –

0

Đối nhanh chóng 3,0 bạn lập trình có thể gọi phương thức đại biểu thanh tabbar như thế này

self.tabController.selectedIndex = index (e.g. 0,1...etc) 
self.tabController.delegate.tabBarController(self.tabController, didSelectViewController: self.tabController.viewControllers[index]) 
Các vấn đề liên quan