簡體   English   中英

iOS:tableviewcontroller的UITabBarControllerDelegate方法

[英]IOS: UITabBarControllerDelegate Methods from tableviewcontroller

我正在嘗試使用tabbarcontroller的委托方法之一從嵌入在tabbarcontroller中的視圖控制器中檢測另一個選項卡的輕擊。 但是,對於這些方法是否可以在單個視圖控制器中還是必須在uitabbarcontroller類中,我感到困惑。 我希望將它們放在可以訪問這些VC的所有屬性和局部變量的視圖控制器中,而不是在tabbarcontroller類中。

我也對如何設置代表感到困惑。

在tabbarcontroller中嵌入的tableview控制器中,我聲明了委托協議,然后包括以下代碼。 但是,該方法不觸發。 可以將此委托方法放入VC中嗎?如果可以,我應該如何以及在何處設置委托以使其啟動?

- (void)tabBarController:(UITabBarController *)tabBarController
 didSelectViewController:(UIViewController *)viewController
{
    NSLog(@"DIDSELECTVC FIRED");
    NSLog(@"controller class: %@", NSStringFromClass([viewController class]));
    NSLog(@"controller title: %@", viewController.title);

    if (viewController == tabBarController.moreNavigationController)
    {
        tabBarController.moreNavigationController.delegate = self;
    }
}

正如Toru Furuya所說,實現UITabBarControllerDelegate的更好方法是在UITabBarController本身的子類中。

如果要使用某些內部視圖控制器作為委托,請使用tabBarController屬性:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tabBarController.delegate = self;
}

您可以使用單獨的ViewController或UITabBarController本身作為委托,只要它符合UITabBarControllerDelegate協議即可。

我認為,將UITabBarController本身(或另一個專用類)用於UITabBarControllerDelegate比使用子ViewController更常見,因為您只能設置一個委托。 但是,如果您要使用單個ViewController,希望此代碼對您有所幫助。

@implementation MyTabBarController : UITabBarController

- (id)initWithCoder:(NSCoder *)aCoder{
    self = [super initWithCoder:aCoder];
    if (self) {
        MyTableViewController *controller = [[MyTableViewController alloc] init];
        controller.tabBarItem = ...
        _delegate = controller;  //Set individual ViewController to UITabBarControllerDelegate
        [self setViewControllers:@[controller] animated:YES];
    }
    return self;
}

@end

MyTableViewController是:

@interface MyTableViewController : UITableViewController<UITabBarControllerDelegate>
@end

@implementation MyTableViewController

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    //Handle tap event of UITabBarController
}
@end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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