![](/img/trans.png)
[英]Created TabbarController in Storyboard can't change view programmatically
[英]Programmatically Selecting a TabBarController View?
為了啟動和運行我的自定義菜單,我最終使用了UITabBarController
並且需要更改以編程方式顯示的視圖,而不是屏幕上的標准選項卡式菜單。
一切都按預期進行,除了在事情上。 我正在嘗試使用:
[self setSelectedIndex:index];
這段代碼在自定義委托方法的UITabBarController
子類中。 (因此,我可以在與菜單交互時以編程方式調整視圖)。 但是,在調用此代碼時,它沒有執行任何操作嗎?
是否必須從選項卡式視圖之一調用它? 我希望從TabBarController內部運行它,以避免在每個選項卡式子控制器中重復代碼。
更新:
剛剛發現使用[self setSelectedIndex:index];
在viewDidLoad
工作正常。 但是當在委托方法中調用它時,它不會更改視圖。 它正在使用正確的索引號並被調用,但沒有使用該方法執行任何操作。
此外,它似乎標簽控制器是一個不同的對象,當我登錄self
在viewDidLoad
VS我的委托方法。 那么,為什么我會丟失對原始控制器的引用?
它只是另一個視圖控制器中容器中的UITabBarController。
代表代碼:
@接口
@protocol SLMenuDelegate <NSObject>
@required -(void)menuDidChangeViewToIndex:(NSInteger)index;
@end
@property (nonatomic, assign) id<SLMenuDelegate>menuDelegate;
@實施
@synthesize menuDelegate;
self.menuDelegate = [self.storyboard instantiateViewControllerWithIdentifier:@"TabBarViewController"];
[menuDelegate menuDidChangeViewToIndex:[self.menuItemButtons indexOfObject:sender]];
UITabBarController
-(void)menuDidChangeViewToIndex:(NSInteger)index
{
[self setSelectedIndex:index];
}
設置斷點並運行NSLogs,毫無疑問,該方法將被調用並且所有代碼都將運行。
嘗試使用延遲的性能:
dispatch_async(dispatch_get_main_queue(), ^{
[self setSelectedIndex:index];
});
我沒有設法找到確切問題的解決方案,但是我找到了一種簡單地解決問題的同樣好的方法。
我不再使用委托來發送按鈕點擊消息並更改視圖。 相反,我做了以下工作:
SLTabBarViewController *tabBar = [self.childViewControllers objectAtIndex:0];
[tabBar setSelectedIndex:[self.menuItemButtons indexOfObject:sender]];
這樣就獲得了嵌入式選項卡欄控制器,我只需直接從按鈕點擊來自的原始視圖控制器中更改視圖即可。
它可能不是一個智能解決方案,但它是一種簡單實用的解決方案,不會產生任何問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.