IOS:来自tableviewcontroller的UITabBarControllerDelegate方法
Posted
技术标签:
【中文标题】IOS:来自tableviewcontroller的UITabBarControllerDelegate方法【英文标题】:IOS: UITabBarControllerDelegate Methods from tableviewcontroller 【发布时间】:2017-02-08 13:38:25 【问题描述】:我正在尝试使用 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;
【问题讨论】:
我发现创建UITabBarController
子类并在那里处理方法更容易。见this answer。
【参考方案1】:
正如 Toru Furuya 所说,实现 UITabBarControllerDelegate 的更好方法是在 UITabBarController 本身的子类中。
如果您想使用某些内部视图控制器作为委托,请使用 tabBarController
属性:
- (void)viewDidLoad
[super viewDidLoad];
self.tabBarController.delegate = self;
【讨论】:
这成功了。这是一个专门的用例。如果我将委托方法放在 tabbarcontroller 中,那么我将不得不访问单个控制器中的一堆属性和逻辑,所以在这种情况下,我认为非常规使用是合理的。【参考方案2】:只要符合 UITabBarControllerDelegate 协议,您可以使用单独的 ViewController 或 UITabBarController 本身进行委托。
我认为将 UITabBarController 本身(或另一个专用类)用于 UITabBarControllerDelegate 比子 ViewControllers 更常见,因为您只能设置一个委托。但是如果你想使用单独的 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
【讨论】:
以上是关于IOS:来自tableviewcontroller的UITabBarControllerDelegate方法的主要内容,如果未能解决你的问题,请参考以下文章
来自 tableViewController 子类的 UINavigationController pushViewController
如何通过来自同一个 TableViewController 的多个 segue 到同一个 ViewController
iOS - CoreData - TableViewController - NSInvalidArgumentException',原因:'+entityForName: nil 不是合法的 NSM
ios 7 TableViewController 单元格无法完全显示
如果当前视图是 tableViewController,iOS TableView 不会重新加载
使用 pushViewController 加载 TableViewController 后没有发生 Ios-Segue 到 UIViewController