2012-04-10 3 views
0

У меня есть подкласс UIButton, где я переписываю drawRect для пользовательской кнопки поиска.Как выделить подкласс UIButton?

Но теперь ячейка не выделяет.

Как это исправить?

У меня есть код, готовый для другого пользовательского drawRect, когда нажата ячейка.

- (void)drawRect:(CGRect)rect 
{ 
    //// General Declarations 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    //// Color Declarations 
    UIColor* red = [UIColor colorWithRed: 1 green: 0 blue: 0 alpha: 1]; 
    CGFloat redRGBA[4]; 
    [red getRed: &redRGBA[0] green: &redRGBA[1] blue: &redRGBA[2] alpha: &redRGBA[3]]; 

    UIColor* darkRed = [UIColor colorWithRed: (redRGBA[0] * 0.8) green: (redRGBA[1] * 0.8) blue: (redRGBA[2] * 0.8) alpha: (redRGBA[3] * 0.8 + 0.2)]; 
    UIColor* lightRed = [UIColor colorWithRed: (redRGBA[0] * 0.8 + 0.2) green: (redRGBA[1] * 0.8 + 0.2) blue: (redRGBA[2] * 0.8 + 0.2) alpha: (redRGBA[3] * 0.8 + 0.2)]; 

    //// Gradient Declarations 
    NSArray* redGradientColors = [NSArray arrayWithObjects: 
            (id)darkRed.CGColor, 
            (id)lightRed.CGColor, nil]; 
    CGFloat redGradientLocations[] = {0, 1}; 
    CGGradientRef redGradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)redGradientColors, redGradientLocations); 

    //// Shadow Declarations 
    CGColorRef shadow = [UIColor lightGrayColor].CGColor; 
    CGSize shadowOffset = CGSizeMake(0, -0); 
    CGFloat shadowBlurRadius = 1; 
    CGColorRef shadow2 = [UIColor blackColor].CGColor; 
    CGSize shadow2Offset = CGSizeMake(0, -0); 
    CGFloat shadow2BlurRadius = 2; 


    //// Rounded Rectangle Drawing 
    UIBezierPath* roundedRectanglePath = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(35, 5, 250, 50) cornerRadius: 6]; 
    CGContextSaveGState(context); 
    CGContextSetShadowWithColor(context, shadow2Offset, shadow2BlurRadius, shadow2); 
    CGContextSetFillColorWithColor(context, shadow2); 
    [roundedRectanglePath fill]; 
    [roundedRectanglePath addClip]; 
    CGContextDrawLinearGradient(context, redGradient, CGPointMake(160, 55), CGPointMake(160, 5), 0); 

    ////// Rounded Rectangle Inner Shadow 
    CGRect roundedRectangleBorderRect = CGRectInset([roundedRectanglePath bounds], -shadowBlurRadius, -shadowBlurRadius); 
    roundedRectangleBorderRect = CGRectOffset(roundedRectangleBorderRect, -shadowOffset.width, -shadowOffset.height); 
    roundedRectangleBorderRect = CGRectInset(CGRectUnion(roundedRectangleBorderRect, [roundedRectanglePath bounds]), -1, -1); 

    UIBezierPath* roundedRectangleNegativePath = [UIBezierPath bezierPathWithRect: roundedRectangleBorderRect]; 
    [roundedRectangleNegativePath appendPath: roundedRectanglePath]; 
    roundedRectangleNegativePath.usesEvenOddFillRule = YES; 

    CGContextSaveGState(context); 
    { 
     CGFloat xOffset = shadowOffset.width + round(roundedRectangleBorderRect.size.width); 
     CGFloat yOffset = shadowOffset.height; 
     CGContextSetShadowWithColor(context, 
            CGSizeMake(xOffset + copysign(0.1, xOffset), yOffset + copysign(0.1, yOffset)), 
            shadowBlurRadius, 
            shadow); 

     [roundedRectanglePath addClip]; 
     CGAffineTransform transform = CGAffineTransformMakeTranslation(-round(roundedRectangleBorderRect.size.width), 0); 
     [roundedRectangleNegativePath applyTransform: transform]; 
     [[UIColor grayColor] setFill]; 
     [roundedRectangleNegativePath fill]; 
    } 
    CGContextRestoreGState(context); 

    CGContextRestoreGState(context); 

    [[UIColor blackColor] setStroke]; 
    roundedRectanglePath.lineWidth = 1; 
    [roundedRectanglePath stroke]; 

    //// Cleanup 
    CGGradientRelease(redGradient); 
    CGColorSpaceRelease(colorSpace); 
} 
+1

Пожалуйста, пост кода здесь. –

+0

Отправленный код выше – Jon

ответ

0

подклассификация UIButton не имеет смысла, потому что это своего рода сборка/кластерный класс.

У меня был лучший опыт создания собственных кнопок при подклассификации UIControl и добавление какого-либо пользовательского поведения.

Проверьте также this (вы не должны подкласса UIButton).

Затем также check how you highlight UIControl subclass.

+0

О, хорошо. Итак, как мне включить код, который я разместил, не создавая подкласс? – Jon

+0

Почему бы не поместить drawRect в подкласс UIControl. Затем добавьте настраиваемое событие управления следующим образом: '[self addTarget: self action: @selector (myMethode) forControlEvents: UIControlEventTouchUpInside]'; –

+0

Не могли бы вы рассказать об этом? Прямо сейчас у меня просто есть пустые подклассы UIControl с только методом drawRect, который я разместил выше. – Jon

0

я думаю, что вы можете иметь дело с проблемой выделения с помощью этих методов ниже

- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event; 
- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event; 
- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event; 
- (void)cancelTrackingWithEvent:(UIEvent *)event; 

вы можете изменить цвет или изображение в этой методе

Смежные вопросы