こんにちは、インターフェイス ビルダーではなく xcode でタブ バー コントローラーを作成しています。タブのビューのタイトルはタブのタイトルを設定しますが、画像を設定する方法がわかりません。
誰でも助けることができますか?
こんにちは、インターフェイス ビルダーではなく xcode でタブ バー コントローラーを作成しています。タブのビューのタイトルはタブのタイトルを設定しますが、画像を設定する方法がわかりません。
誰でも助けることができますか?
View Controllerの配列を取得してから画像を追加できることがわかりました:
NSArray *tabs = tabBarController.viewControllers;
UIViewController *tab1 = [tabs objectAtIndex:0];
tab1.tabBarItem.image = [UIImage imageNamed:@"clockicon.png"];
UIViewController *tab2 = [tabs objectAtIndex:1];
tab2.tabBarItem.image = [UIImage imageNamed:@"nearest.png"];
UIViewController には、imageプロパティを持つtabBarItemプロパティがあります ( UIBarItemクラスUITabBarItemサブクラスから継承されます)。例えば:
viewController.tabBarItem.image = [UIImage imageNamed:@"foo.png"];
UITabBarController
タブ バー アイテムのカラフルなイメージ、バー アイテムのフォント、タブ バーの背景イメージなど、多くの特性は許可されません。私は回避策を見つけました。1 つがxib を介して (アプリ デリゲートではなく) にUITabBarController
追加されると、 ( 「ビュー」という名前の) のファイルもあります。タブバーとタブバーアイテム、ラベルなど、必要なものの画像を含む画像ビューを追加して、タブバーのフレームのすぐ下に収まるようにします。ここで、タブバットを非表示にする必要がありますが、それでも機能します。のタブバーのアルファ値を減らしますUITabBarController
UIView
UITabBarController
UITabBarController
xib tp 0.02 以降 (0.01 未満では、タブ バーはタッチ操作をキャッチしません)。あなたは終わった!これらすべてをプログラムで実行する場合でも...これらは非常に些細なことです...この回り道は、開発者がサブクラス化できないというアップルのポリシーを回避しUITabBarController
ます。そう...乾杯:)
私はすぐに次のクラスを作成し、UITabBarController からのタブ ビューの表示/非表示は魔法のように機能しました。
TabBarDesigner.h
#import <Foundation/Foundation.h>
@interface TabBarDesigner : NSObject
{
}
+(void) setTabBarController:(UITabBarController *)tabBarController
items:(NSArray *)tabBarItems
viewControllers:(NSArray *)viewControllers;
+(void) removeItemsInRange:(NSRange) range;
@end
TabBarDesigner.m
#import "TabBarDesigner.h"
static NSArray *_tabBarItems = NULL;
static NSArray *_viewControllers = NULL;
static UITabBarController *_tabBarController = NULL;
@implementation TabBarDesigner
+(void) setTabBarController:(UITabBarController *)tabBarController
items:(NSArray *)tabBarItems
viewControllers:(NSArray *)viewControllers
{
if (tabBarItems && viewControllers && tabBarController)
{
if ([tabBarItems count] == [viewControllers count])
{
[_tabBarItems release];
[_viewControllers release];
_tabBarItems = [tabBarItems copy];
_viewControllers = [viewControllers copy];
_tabBarController = tabBarController;
}
}
}
+(void) removeItemsInRange:(NSRange) range
{
if (_tabBarController)
{
if ( range.location < ([_tabBarItems count] - 1) )
{
if ( (range.length + range.location) < [_tabBarItems count] )
{
NSMutableArray *tabBarItems = [_tabBarItems mutableCopy];
[tabBarItems removeObjectsInRange:range];
NSMutableArray *viewControllers = [_viewControllers mutableCopy];
[viewControllers removeObjectsInRange:range];
[_tabBarController setViewControllers:viewControllers];
NSUInteger i;
for (i = 0; i< [viewControllers count]; i++)
{
UIViewController *vC = [viewControllers objectAtIndex:i];
vC.tabBarItem.image = [[tabBarItems objectAtIndex:i] image];
vC.tabBarItem.title = [[tabBarItems objectAtIndex:i] title];
vC.tabBarItem.tag = [[tabBarItems objectAtIndex:i] tag];
}
[tabBarItems release];
[viewControllers release];
}
}
}
}
@end
このクラスの使用方法のサンプル: MyAppDelegate.m 内
#import "TabBarDesigner.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[TabBarDesigner setTabBarController:_tabBarController
items:[_tabBarController.tabBar items]
viewControllers:[_tabBarController viewControllers]];
// remove the first 3 tabs
[TabBarDesigner removeItemsInRange:NSMakeRange(0,3)];
// show all tabs
[TabBarDesigner removeItemsInRange:NSMakeRange(0,0)];
// continue with your code
}
乾杯!
スイフト5.4
let tabs = tabBarController.viewControllers
let tab1 = tabs[0]
tab1.tabBarItem.image = UIImage(named: "clockicon.png")
let tab2 = tabs[1]
tab2.tabBarItem.image = UIImage(named: "nearest.png")