#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
, вы можете легко добавлять или рисовать что-либо на этом элементе управления и легко настраивать это.
Надеюсь, это поможет. Приветствия.