2
탭 표시 줄에서 선택되지 않은 이미지의 색상을 변경하려고 시도하면 기본적으로 이미지가 다른 색상 인 경우에도 회색으로 변경됩니다.iOS 7에서 선택되지 않은 탭 막대 항목의 색상을 변경하는 방법은 무엇입니까?
이미 검색했지만 답변은 iOS 6 이하에서만 가능합니다.
탭 표시 줄에서 선택되지 않은 이미지의 색상을 변경하려고 시도하면 기본적으로 이미지가 다른 색상 인 경우에도 회색으로 변경됩니다.iOS 7에서 선택되지 않은 탭 막대 항목의 색상을 변경하는 방법은 무엇입니까?
이미 검색했지만 답변은 iOS 6 이하에서만 가능합니다.
이것은 내가 최근에 화를 냈다. 그래서 나는 그것을 시험해 본 iOS의 모든 버전에서 작동하는 내 자신의 수업을 처리했다;) 당신이하기를 원하는 것은 무엇이든 할 수있는 그것의 정말로 쉬운 확장!
GozTabBar.h :
#import <UIKit/UIKit.h>
#import "GozTabBarItem.h"
@protocol GozTabBarDelegate;
@interface GozTabBar : UIView
{
UITapGestureRecognizer* pTapGestureRecognizer;
}
@property UIColor* backgroundColour;
@property (unsafe_unretained, nonatomic) id <GozTabBarDelegate> delegate;
@end
@protocol GozTabBarDelegate <NSObject>
- (int) getNumberOfTabBarItemsForTabBar: (GozTabBar*) pTabBar;
- (GozTabBarItem*) getTabBarItemsAtIndex: (int) index ForTabBar: (GozTabBar*) pTabBar;
- (void) selectedItemAtIndex: (int) index ForTabBar: (GozTabBar*) pTabBar;
- (int) getSelectedItemIndexForTabBar: (GozTabBar*) pTabBar;
@end
GozTabBar.m
#import "GozTabBar.h"
#import "GozTabBarItem.h"
@implementation GozTabBar
@synthesize backgroundColour;
@synthesize delegate;
const int leftEdgeInset = 8;
const int rightEdgeInset = 8;
const int topEdgeInset = 8;
const int bottomEdgeInset = 8;
- (id)init
{
self = [super init];
if (self)
{
pTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(onTap:)];
[self addGestureRecognizer: pTapGestureRecognizer];
}
return self;
}
- (id) initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self)
{
pTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(onTap:)];
[self addGestureRecognizer: pTapGestureRecognizer];
}
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
pTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(onTap:)];
[self addGestureRecognizer: pTapGestureRecognizer];
}
return self;
}
// Recognise a tap on the item (If it is on an item).
- (void)onTap: (UIGestureRecognizer *)gestureRecognizer
{
const int leftRightEdgeInset = leftEdgeInset + rightEdgeInset;
const int topBottomEdgeInset = topEdgeInset + bottomEdgeInset;
int numItems = 0;
if ([self.delegate respondsToSelector: @selector(getNumberOfTabBarItemsForTabBar:)])
{
numItems = [self.delegate getNumberOfTabBarItemsForTabBar: self];
}
if (numItems > 0)
{
int widthLessInset = (self.frame.size.width - leftRightEdgeInset);
int itemWidth = widthLessInset/numItems;
int heightLessInset = self.frame.size.height - topBottomEdgeInset;
int itemHeight = heightLessInset;
CGPoint tapPoint = [gestureRecognizer locationInView: self];
// Draw the custom items.
for(int i = 0; i < numItems; i++)
{
CGRect tabBarItemRect = CGRectMake(leftEdgeInset + (itemWidth * i), 0, itemWidth, itemHeight);
if (CGRectContainsPoint(tabBarItemRect, tapPoint))
{
if ([self.delegate respondsToSelector: @selector(selectedItemAtIndex:ForTabBar:)])
{
[self.delegate selectedItemAtIndex: i ForTabBar: self];
}
break;
}
}
}
}
- (void)drawRect:(CGRect)rect
{
const int leftRightEdgeInset = leftEdgeInset + rightEdgeInset;
const int topBottomEdgeInset = topEdgeInset + bottomEdgeInset;
CGContextRef ctx = UIGraphicsGetCurrentContext();
// Fill the background in the relevant colour.
CGContextSetFillColorWithColor(ctx, backgroundColour.CGColor);
CGContextFillRect(ctx, rect);
int numItems = 0;
if ([self.delegate respondsToSelector: @selector(getNumberOfTabBarItemsForTabBar:)])
{
numItems = [self.delegate getNumberOfTabBarItemsForTabBar: self];
}
if (numItems > 0)
{
int widthLessInset = (rect.size.width - leftRightEdgeInset);
int itemWidth = widthLessInset/numItems;
int heightLessInset = rect.size.height - topBottomEdgeInset;
int itemHeight = heightLessInset;
int selectedIndex = 0;
if ([self.delegate respondsToSelector: @selector(getSelectedItemIndexForTabBar:)])
{
selectedIndex = [self.delegate getSelectedItemIndexForTabBar: self];
}
// Draw the custom items.
for(int i = 0; i < numItems; i++)
{
//GozTabBarItem* pItem = [self.items objectAtIndex: i];
GozTabBarItem* pItem = nil;
if ([self.delegate respondsToSelector: @selector(getTabBarItemsAtIndex:ForTabBar:)])
{
pItem = [self.delegate getTabBarItemsAtIndex: i ForTabBar: self];
}
if (pItem != nil)
{
CGRect tabBarItemRect = CGRectMake(leftEdgeInset + (itemWidth * i), topEdgeInset, itemWidth, itemHeight);
CGPoint tabBarItemCenter = CGPointMake(tabBarItemRect.origin.x + (tabBarItemRect.size.width/2), tabBarItemRect.origin.y + (tabBarItemRect.size.height/2));
UIImage* pDrawImage = nil;
if (i == selectedIndex)
{
pDrawImage = pItem.selectedImage;
}
else
{
pDrawImage = pItem.unSelectedImage;
}
CGRect drawRect = CGRectMake(tabBarItemCenter.x - (pDrawImage.size.width/2), tabBarItemCenter.y - (pDrawImage.size.height/2), pDrawImage.size.width, pDrawImage.size.height);
[pDrawImage drawInRect: drawRect];
}
}
}
}
GozTabBarItem.h
#import <UIKit/UIKit.h>
@interface GozTabBarItem : NSObject
{
}
@property UIImage* selectedImage;
@property UIImage* unSelectedImage;
- (id) initWithSelectedImage: (UIImage*) selectedImage andUnselectedImage: (UIImage*) unSelectedImage;
@end
GozTabBarItem.m
#import "GozTabBarItem.h"
@implementation GozTabBarItem
@synthesize selectedImage;
@synthesize unSelectedImage;
- (id) initWithSelectedImage: (UIImage*) selectedImg andUnselectedImage: (UIImage*) unSelectedImg
{
self = [super init];
if (self)
{
self.selectedImage = selectedImg;
self.unSelectedImage = unSelectedImg;
}
return self;
}
@end
희망은 도움이됩니다.