我有一个根视图控制器,它没有被设置为我的故事板上任何视图控制器的自定义类.相反,我的所有视图控制器都是这样的子类.
// RootViewController
class RootViewController: UIViewController, UITabBarDelegate {
// This is not getting executed on any of the view controllers
func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
print("ddd")
}
}
// Subclassing it
class TopStoriesViewController: RootViewController {
}
Run Code Online (Sandbox Code Playgroud)
但是,当在视图控制器上按下tabbaritem时,我似乎正在努力做某事,该视图控制器是rootviewcontroller的子类,即消息未被打印.
我正在重构我的iPad应用程序而不是NavigationBar上的按钮,我想将我的Logout按钮作为TabBar按钮项.
我的所有观点都在一个独特的StoryBoard中,所以我通过这种方式在我的Appdelegate.m中获取了我的TabBar:
// Add logout tab to tabbar
storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UITabBarController *tabbar = (UITabBarController *)[storyboard instantiateViewControllerWithIdentifier:@"tabbar"];
[tabbar setDelegate:self];
Run Code Online (Sandbox Code Playgroud)
当然,委托协议是在我的Appdelegate.h中声明的
@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>
Run Code Online (Sandbox Code Playgroud)
之后,我创建一个空的viewController以创建我的注销选项卡:
UIViewController *logout = [[UIViewController alloc]init];
Run Code Online (Sandbox Code Playgroud)
然后我将tabbar viewControllers作为NSMutableArray并添加我的注销VC:
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[tabbar viewControllers]];
[viewControllers addObject:logout];
Run Code Online (Sandbox Code Playgroud)
最后我用我的新数组设置tabbar viewControllers:
[tabbar setViewControllers:viewControllers];
Run Code Online (Sandbox Code Playgroud)
我认为这些步骤是正确的.那么为什么在更改显示的选项卡时不会调用didSelectViewController?
如果它可以帮助,这是我的didSelectViewController方法(在AppDelegate.m中写入)
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
NSLog(@"onglet sélectionné : %d / %d", [tabBarController selectedIndex], [[tabBarController viewControllers]count]);
//select the index where your logout button is
if ([tabBarController selectedIndex] == [[tabBarController viewControllers]count]-1) …Run Code Online (Sandbox Code Playgroud) 在我的 Swift 应用程序中,我有一个处理UITabBar.
class CustomTabBar: UITabBar {
override func awakeFromNib() {
super.awakeFromNib()
}
}
Run Code Online (Sandbox Code Playgroud)
当用户点击它们时,如何为项目设置动画?我的意思是 aCGAffine(scaleX: 1.1, y: 1.1)
那么我如何为标签栏的项目设置动画?
我有两个视图控制器(FirstViewController和SecondViewController)和一个标签栏控制器,我正在使用故事板.在FirstViewController中,用户可以拖放imageview.因此,每当用户点击显示SecondViewController的第二个TabBarItem时,我想检查用户是否每次单击TabBarItem时都删除了图像.
所以我理解这可以UITabBarDelegate用它的方法完成-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item.但我做错了,因为没有调用该方法,我相信这是因为我无法正确设置委托.所以我希望SecondViewController成为TabBarController的委托.
所以在我,SecondViewController.h我有以下
@interface SecondViewController : UIViewController<UITabBarDelegate>
Run Code Online (Sandbox Code Playgroud)
在SecondViewController.m我有
-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
NSLog(@"%@", item);
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.tabBarController.delegate = self;
}
Run Code Online (Sandbox Code Playgroud)
但没有任何反应,在设置委托时我也收到编译器警告:从不兼容类型'SecondViewController*const __strong'分配给'id'
请温柔地对待我,这是我的第一个应用程序,也是我第一次尝试使用代表.
我想要的是简单,IOS上的Instagram中间选项卡打开应用程序的相机界面,但不像其他选项卡,但作为一个独立的视图控制器,当你按下取消它回到你最后一个标签.
有任何想法吗??
ios ×4
swift ×2
appdelegate ×1
camera ×1
instagram ×1
iphone ×1
objective-c ×1
uitabbar ×1
xcode ×1