Как заставить кнопку вести себя как ячейка табличного представления

#ios #objective-c #xcode #uibutton #interface-builder

#iOS #objective-c #xcode #uibutton #конструктор интерфейса

Вопрос:

Как мне настроить UIButton так, чтобы он вел себя как ячейка табличного представления? Я пытался сделать это в Interface Builder, но поскольку кнопка невидима и не имеет изображения, она никогда не выделяется при ее нажатии. Я хочу, чтобы это поведение было выделено серым цветом, как в ячейке табличного представления. Кто-нибудь знает, как это сделать?

Комментарии:

1. Я не понимаю. Если ваша кнопка невидима, конечно, вы ее не увидите, и, следовательно, у нее не может быть подсветки.

2. Почему кнопка? Вы можете добиться этого и в UIView, просто вам нужно нажать на View, одним нажатием изменить цвет фона и через некоторое время с помощью performselector изменить на обычный.

3. Хорошо, конечно, вы можете создать свою собственную кнопку, но я подумал, что, возможно, есть простой способ использовать UIButton и сделать то же самое … в любом случае спасибо

Ответ №1:

Простой способ когда-либо:

Создайте серое квадратное изображение png размером 10×10 пикселей, сохраните его и назовите как «greayButtBkg.png» и перетащите его в SupportingFiles в XCode. Объявите выход вашей кнопки в вашем файле .h и метод IBAction в вашем файле .m.

yourFile.h:

 @property (weak, nonatomic) IBOutlet UIButton *myButton;
  

yourFile.m:

 - (IBAction)pressButton:(id)sender {
    [_myButton setBackgroundImage:[UIImage imageNamed:@"greyButtBkg"] forState:UIControlStateHighlighted];
}
  

Ваша кнопка получит серый цвет фона, когда вы нажмете на нее, и вернется к своему цвету по умолчанию, когда вы отпустите палец.

Надеюсь, это поможет!

Комментарии:

1. Да! Это работает отлично. И благодаря вам я узнал, как это исправить и в Interface Builder. В «Инспекторе атрибутов» измените «State Config» на «Выделенный» и в разделе «Фон» введите имя созданного вами серого изображения. Тогда вам не нужно объявлять выход.

Ответ №2:

Я создал a Custom Control , который будет вести себя так UITableViewCell . Смотрите код ниже

MyButton.h

 #import <UIKit/UIKit.h>

@interface MyButton : UIView
- (id)initWithFrame:(CGRect)frame selector:(SEL)sel target:(id)target;
@end
  

MyButton.m

 #import "MyButton.h"
#import <QuartzCore/QuartzCore.h>


@interface MyButton()
@property(assign)SEL selector;
@property(assign)id target;
@end

@implementation MyButton

- (id)initWithFrame:(CGRect)frame selector:(SEL)sel target:(id)target
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code

        self.selector=sel;
        self.target=target;

        self.backgroundColor=[UIColor darkGrayColor];
        self.layer.cornerRadius=5.0;
        UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
        [self addGestureRecognizer:tapGesture];
    }
    return self;
}

-(void)tapAction:(id)sender{

    [UIView animateWithDuration:.2 animations:^{
        [self setBackgroundColor:[UIColor lightGrayColor]];
    }];

    [self performSelector:@selector(deSelect) withObject:nil afterDelay:.2];
}

-(void)deSelect{

    [UIView animateWithDuration:.2 animations:^{
        [self setBackgroundColor:[UIColor darkGrayColor]];
    } completion:^(BOOL finished) {
        [_target performSelector:_selector withObject:self];
    }];

}

/*- (void)drawRect:(CGRect)rect
{
}*/

@end
  

Поскольку она использует UIView , вы можете легко добавлять или рисовать что-либо на этом элементе управления и легко настраивать это.

Надеюсь, это поможет. Приветствия.