Установка изображения для UIButton в коде
Как вы устанавливаете изображение для UIButton в коде?
У меня есть это:
UIButton *btnTwo = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btnTwo.frame = CGRectMake(40, 140, 240, 30);
[btnTwo setTitle:@"vc2:v1" forState:UIControlStateNormal];
[btnTwo addTarget:self action:@selector(goToOne) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnTwo];
но не вижу, что будет установить изображение для него.
11 ответов:
С
UIImage *btnImage = [UIImage imageNamed:@"image.png"]; [btnTwo setImage:btnImage forState:UIControlStateNormal];Swift 4
let btnImage = UIImage(named: "image") btnTwo.setImage(btnImage , for: UIControlState.normal)
решение Майка просто покажет изображение, но любой заголовок, установленный на кнопке, не будет виден, потому что вы можете установить заголовок или изображение.
Если вы хотите установить оба (изображение и название), используйте следующий код:
btnImage = [UIImage imageNamed:@"image.png"]; [btnTwo setBackgroundImage:btnImage forState:UIControlStateNormal]; [btnTwo setTitle:@"Title" forState:UIControlStateNormal];
прежде чем это будет работать для меня, я должен был изменить размер рамки кнопки явно на основе размера кадра изображения.
UIImage *listImage = [UIImage imageNamed:@"list_icon.png"]; UIButton *listButton = [UIButton buttonWithType:UIButtonTypeCustom]; // get the image size and apply it to the button frame CGRect listButtonFrame = listButton.frame; listButtonFrame.size = listImage.size; listButton.frame = listButtonFrame; [listButton setImage:listImage forState:UIControlStateNormal]; [listButton addTarget:self.navigationController.parentViewController action:@selector(revealToggle:) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *jobsButton = [[UIBarButtonItem alloc] initWithCustomView:listButton]; self.navigationItem.leftBarButtonItem = jobsButton;
вы можете сделать это
[btnTwo setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = CGRectMake(0, 0, 150, 44); [btn setBackgroundImage:[UIImage imageNamed:@"buttonimage.png"] forState:UIControlStateNormal]; [btn addTarget:self action:@selector(btnSendComment_pressed:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn];
в случае быстрого пользователя
// case of normal image let image1 = UIImage(named: "your_image_file_name_without_extension")! button1.setImage(image1, forState: UIControlState.Normal) // in case you don't want image to change when "clicked", you can leave code below // case of when button is clicked let image2 = UIImage(named: "image_clicked")! button1.setImage(image2, forState: UIControlState.Highlight)
вы можете поместить изображение в любом из способов:
UIButton *btnTwo = [UIButton buttonWithType:UIButtonTypeRoundedRect]; btnTwo.frame = CGRectMake(40, 140, 240, 30); [btnTwo setTitle:@"vc2:v1" forState:UIControlStateNormal]; [btnTwo addTarget:self action:@selector(goToOne) forControlEvents:UIControlEventTouchUpInside]; [btnTwo setImage:[UIImage imageNamed:@"name.png"] forState:UIControlStateNormal]; //OR setting as background image [btnTwo setBackgroundImage:[UIImage imageNamed:@"name.png"] forState:UIControlStateNormal]; [self.view addSubview:btnTwo];
Я искал решение, чтобы добавить
UIImageмойUIButton. Проблема была только в том, что он отображает изображение больше, чем нужно. Просто помог мне с этим:_imageViewBackground = [[UIImageView alloc] initWithFrame:rectImageView]; _imageViewBackground.image = [UIImage imageNamed:@"gradientBackgroundPlain"]; [self addSubview:_imageViewBackground]; [self insertSubview:_imageViewBackground belowSubview:self.label]; _imageViewBackground.hidden = YES;каждый раз, когда я хочу, чтобы отобразить мой
UIImageViewЯ просто установил varhiddenдоYESилиNO. Там могут быть и другие решения, но я запутался так много раз с этим материалом, и это решило его, и мне не нужно было иметь дело с внутренними вещамиUIButtonделает в фоновом режиме.
Не волнуйтесь так много обрамление кнопки из кода, Вы можете сделать это на раскадровке. Это сработало для меня, одна линия...более простой.
[self.button setBackgroundImage:[UIImage imageNamed: @"yourPic.png"] forState:UIControlStateNormal];
Swift 3 version (butt_img должно быть изображение, установленное в активы.xcassets или картинки.xcassets папку в Xcode):
btnTwo.setBackgroundImage(UIImage(named: "butt_img"), for: .normal) btnTwo.setTitle("My title", for: .normal)В любом случае, если вы хотите, чтобы изображение было масштабировано, чтобы заполнить размер кнопки, вы можете добавить
UIImageViewнад ним и присвоить ему изображение:let img = UIImageView() img.frame = btnTwo.frame img.contentMode = .scaleAspectFill img.clipsToBounds = true img.image = UIImage(named: "butt_img") btnTwo.addSubview(img)
-(void)buttonTouched:(id)sender { UIButton *btn = (UIButton *)sender; if( [[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"icon-Locked.png"]]) { [btn setImage:[UIImage imageNamed:@"icon-Unlocked.png"] forState:UIControlStateNormal]; // other statements.... } else { [btn setImage:[UIImage imageNamed:@"icon-Locked.png"] forState:UIControlStateNormal]; // other statements.... } }
Comments