簡體   English   中英

以編程方式選擇TabBarController視圖?

[英]Programmatically Selecting a TabBarController View?

為了啟動和運行我的自定義菜單,我最終使用了UITabBarController並且需要更改以編程方式顯示的視圖,而不是屏幕上的標准選項卡式菜單。

一切都按預期進行,除了在事情上。 我正在嘗試使用:

[self setSelectedIndex:index];

這段代碼在自定義委托方法的UITabBarController子類中。 (因此,我可以在與菜單交互時以編程方式調整視圖)。 但是,在調用此代碼時,它沒有執行任何操作嗎?

是否必須從選項卡式視圖之一調用它? 我希望從TabBarController內部運行它,以避免在每個選項卡式子控制器中重復代碼。

更新:

剛剛發現使用[self setSelectedIndex:index]; viewDidLoad工作正常。 但是當在委托方法中調用它時,它不會更改視圖。 它正在使用正確的索引號並被調用,但沒有使用該方法執行任何操作。

此外,它似乎標簽控制器是一個不同的對象,當我登錄selfviewDidLoad 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM