Кнопка смены программного обеспечения

Im действительно имеет проблему с моим изображением с рамкой кнопки, то, что я хочу: 1. Когда он будет выбран, у него будет галочка. 2. Когда представление будет отклонено, а затем вернется к предыдущему экрану, оно все равно проверит выбранное изображение 3. Когда я нажимаю выбранное изображение или другое изображение, он удаляет галочку.

Я смог это сделать, но у меня проблема с настройкой изображения:

Я хочу, чтобы это:

введите описание изображения здесь

UIImage *bgImage = [UIImage imageNamed:@"AGIPC-Checkmark-iPhone.png"]; [myButton setBackgroundImage:bgImage forState:UIControlStateDisabled]; [myButton setEnabled:NO]; 

Но это необходимая мне функция:

введите описание изображения здесь

 UIImage *bgImage = [UIImage imageNamed:@"AGIPC-Checkmark-iPhone.png"]; [myButton setImage:bgImage forState:UIControlStateSelected]; [myButton setSelected:YES]; 

Вот код ниже (Если что-то не так с тем, что я делаю, скажите мне, спасибо):

 - (void)viewDidLoad { UIImage *bgImage = [UIImage imageNamed:@"AGIPC-Checkmark-iPhone.png"]; [myButton setBackgroundImage:bgImage forState:UIControlStateHighlighted]; [myButton setBackgroundImage:bgImage forState:UIControlStateDisabled]; // Create view UIScrollView *view = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f,0.0f,1024.0f,768.0f)]; int row = 0; int column = 0; for(int i = 0; i < _thumbs.count; ++i) { UIImage *thumb = [_thumbs objectAtIndex:i]; myButton = [UIButton buttonWithType:UIButtonTypeCustom]; myButton.frame = CGRectMake(column*140+24, row*150+10, 100, 100); [myButton setImage:thumb forState:UIControlStateNormal]; [myButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; myButton.tag = i; NSLog(@"%i",i); NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSInteger selectedImageSlot1 = [prefs integerForKey:@"selected1"]; if ( selectedImageSlot1 == i){ [self turnButtonToSelected]; } [view addSubview:myButton]; if (column == 6) { column = 0; row++; } else { column++; } } [view setContentSize:CGSizeMake(1024, (row+1) * 150 + 10)]; } - (void)turnButtonToSelected { UIImage *bgImage = [UIImage imageNamed:@"AGIPC-Checkmark-iPhone.png"]; [myButton setBackgroundImage:bgImage forState:UIControlStateNormal]; [myButton setBackgroundImage:bgImage forState:UIControlStateHighlighted]; [myButton setBackgroundImage:bgImage forState:UIControlStateDisabled]; [myButton setEnabled:NO]; } - (void)highlightButton:(UIButton *)a { //[self turnButtonToSelected]; } - (IBAction)buttonClicked:(id)sender { myButton = (UIButton *)sender; self.selectedImage = [_images objectAtIndex:myButton.tag]; if (myButton.selected) { [sender setSelected:NO]; }else { UIImage *bgImage = [UIImage imageNamed:@"AGIPC-Checkmark-iPhone.png"]; [sender setImage:bgImage forState:UIControlStateSelected]; [sender setSelected:YES]; } NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; [prefs setInteger:myButton.tag forKey:@"slot1"]; [[NSUserDefaults standardUserDefaults] setInteger:myButton.tag forKey:@"selected1"]; [[NSUserDefaults standardUserDefaults] synchronize]; [self performSelector:@selector(highlightButton:) withObject:sender afterDelay:0.0]; [self dismissModalViewControllerAnimated:NO]; } 

Или есть способ принудительно сделать кнопку включенной, когда она отключена при нажатии?

3 Solutions collect form web for “Кнопка смены программного обеспечения”

Я только что попробовал это по другому подходу.

Для меня это прекрасно работает и достигает вашего эффекта.

Дайте мне знать, если вам нужно дополнительное объяснение или весь проект Xcode.

 - (void)viewDidLoad { [super viewDidLoad]; //button 1 UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeCustom]; imageButton.frame = CGRectMake(30, 50, 100, 80); UIImage *btnImage = [UIImage imageNamed:@"DSC_5359.JPG"]; [imageButton setBackgroundImage:btnImage forState:UIControlStateNormal]; [imageButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchDown]; //button 2 UIButton *imageButton2 = [UIButton buttonWithType:UIButtonTypeCustom]; imageButton2.frame = CGRectMake(180, 50, 100, 80); UIImage *btnImage2 = [UIImage imageNamed:@"DSC_5355.JPG"]; [imageButton2 setBackgroundImage:btnImage2 forState:UIControlStateNormal]; [imageButton2 addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchDown]; [self.view addSubview:imageButton]; [self.view addSubview:imageButton2]; } - (void)buttonClicked:(UIButton*)button { //NSLog(@"Button clicked! %@", button); UIImage *checkmarkImage = [UIImage imageNamed:@"check.png"]; UIImage *empty = nil; //NSLog(@"Imageview: %d", button.imageView.tag); if (button.imageView.tag == 0) { [button setImage:checkmarkImage forState:UIControlStateNormal]; button.imageView.tag = 1; } else { [button setImage:empty forState:UIControlStateNormal]; button.imageView.tag = 0; } } 

Лучший, Крис

Обновление: я обновил код. Вот весь ViewController. Примечание. Я бы решил это использовать coreData для хранения текущего индекса. Следующий код не подходит для решения этой проблемы, но основывается на вашем исходном коде!

 // // SOViewController.m // SOImageOverlay // // Created by Chris on 24.07.12. // #import "SOViewController.h" @interface SOViewController () @end #define CHECKMARK_IMAGE @"check.png" @implementation SOViewController @synthesize buttons = _buttons; #pragma mark - Custom getter - (NSMutableArray*)buttons { if (_buttons == nil) _buttons = [[NSMutableArray alloc] init]; return _buttons; } #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; // UIImage *bgImage = [UIImage imageNamed:CHECKMARK_IMAGE]; // UIButton *myButton = // [myButton setBackgroundImage:bgImage forState:UIControlStateHighlighted]; // [myButton setBackgroundImage:bgImage forState:UIControlStateDisabled]; // Create view // UIScrollView *view = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f,0.0f,1024.0f,768.0f)]; int row = 0; int column = 0; for(int i = 0; i < 2; ++i) { /*UIImage *thumb = [_thumbs objectAtIndex:i]; myButton = [UIButton buttonWithType:UIButtonTypeCustom]; myButton.frame = CGRectMake(column*140+24, row*150+10, 100, 100); [myButton setImage:thumb forState:UIControlStateNormal]; [myButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; myButton.tag = i; NSLog(@"%i",i);*/ UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeCustom]; if (i == 0) { UIImage *btnImage = [UIImage imageNamed:@"DSC_5359.JPG"]; imageButton.frame = CGRectMake(30, 50, 100, 80); [imageButton setBackgroundImage:btnImage forState:UIControlStateNormal]; } else if (i == 1) { UIImage *btnImage = [UIImage imageNamed:@"DSC_5355.JPG"]; imageButton.frame = CGRectMake(180, 50, 100, 80); [imageButton setBackgroundImage:btnImage forState:UIControlStateNormal]; } [imageButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchDown]; NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSInteger selectedImageSlot1 = [prefs integerForKey:@"selected1"]; if ( selectedImageSlot1 == i){ [self turnButtonToSelected:imageButton]; } [self.view addSubview:imageButton]; //adding current button into buttons array [self.buttons addObject:imageButton]; if (column == 6) { column = 0; row++; } else { column++; } } //[view setContentSize:CGSizeMake(1024, (row+1) * 150 + 10)]; // //button 1 // UIButton *imageButton = [UIButton buttonWithType:UIButtonTypeCustom]; // imageButton.frame = CGRectMake(30, 50, 100, 80); // UIImage *btnImage = [UIImage imageNamed:@"DSC_5359.JPG"]; // [imageButton setBackgroundImage:btnImage forState:UIControlStateNormal]; // [imageButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchDown]; // // //button 2 // UIButton *imageButton2 = [UIButton buttonWithType:UIButtonTypeCustom]; // imageButton2.frame = CGRectMake(180, 50, 100, 80); // UIImage *btnImage2 = [UIImage imageNamed:@"DSC_5355.JPG"]; // [imageButton2 setBackgroundImage:btnImage2 forState:UIControlStateNormal]; // [imageButton2 addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchDown]; // // [self.view addSubview:imageButton]; // [self.view addSubview:imageButton2]; } //- (void)buttonClicked:(UIButton*)button //{ // //NSLog(@"Button clicked! %@", button); // // UIImage *checkmarkImage = [UIImage imageNamed:@"check.png"]; // UIImage *empty = nil; // // //NSLog(@"Imageview: %d", button.imageView.tag); // if (button.imageView.tag == 0) // { // [button setImage:checkmarkImage forState:UIControlStateNormal]; // button.imageView.tag = 1; // } // else // { // [button setImage:empty forState:UIControlStateNormal]; // button.imageView.tag = 0; // } //} // code from stackoverflow // ------------------------------------------------------------ - (void)turnButtonToSelected:(UIButton*)button { UIImage *bgImage = [UIImage imageNamed:CHECKMARK_IMAGE]; //UIButton *myButton = button; //just to use the copied code button.selected = YES; [button setImage:bgImage forState:UIControlStateSelected]; // [myButton setBackgroundImage:bgImage forState:UIControlStateNormal]; // [myButton setBackgroundImage:bgImage forState:UIControlStateHighlighted]; // [myButton setBackgroundImage:bgImage forState:UIControlStateDisabled]; // [myButton setEnabled:NO]; } - (void)highlightButton:(UIButton *)a { //[self turnButtonToSelected]; } - (IBAction)buttonClicked:(id)sender { UIButton *myButton = (UIButton *)sender; //I have removed this line... due to the fact that I don't want to //implement your arrays. //self.selectedImage = [_images objectAtIndex:myButton.tag]; //deselecting all for (UIButton *button in self.buttons) { button.selected = NO; //[button setImage:nil forState:UIControlStateNormal]; } if (myButton.selected) { [sender setSelected:NO]; }else { UIImage *bgImage = [UIImage imageNamed:CHECKMARK_IMAGE]; [sender setImage:bgImage forState:UIControlStateSelected]; [sender setSelected:YES]; } // NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; // [prefs setInteger:myButton.tag forKey:@"slot1"]; //getting index of button in array NSInteger index = 0; NSInteger foundIndex = -1; for (UIButton *button in self.buttons) { if (button == myButton) { foundIndex = index; } index++; } if (foundIndex >= 0) { [[NSUserDefaults standardUserDefaults] setInteger:foundIndex forKey:@"selected1"]; [[NSUserDefaults standardUserDefaults] synchronize]; } [self performSelector:@selector(highlightButton:) withObject:sender afterDelay:0.0]; // [self dismissModalViewControllerAnimated:NO]; } // ------------------------------------------------------------ - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); } - (IBAction)closeButtonClicked:(UIBarButtonItem *)sender { [self dismissModalViewControllerAnimated:YES]; } @end 

Попытайтесь это сделать.

 UIImage *bgImage = [UIImage imageNamed:@"AGIPC-Checkmark-iPhone.png"]; **[myButton setSelected:NO]; [myButton setBackgroundImage:bgImage forState:UIControlStateNormal];** UIImage *bgImage = [UIImage imageNamed:@"AGIPC-Checkmark-iPhone.png"]; **[myButton setSelected:YES]; [myButton setImage:bgImage forState:UIControlStateSelected];** 

В более поздней части кода вы задаете состояние кнопки «выбрано», но в верхнем коде вы этого не сделали. Скорее, вы отключили кнопку. Попробуйте приведенный выше код. Благодарю.

Просто добавьте вас chekedImage в качестве подчиненного над кнопкой, когда пользователь нажимает кнопку


 UIImage * button = [UIImage imageNamed: @ "cat.png"];
 [myButton setBackgroundImage: bgImage forState: UIControlStateNormal];
 // добавить целевую кнопку нажатой 


 - (void) buttonClicked: (id) отправитель {
     если (toogleSwitch) {
        [кнопка addSubview: checkedimageView];  // Только отмеченный значок изображения
     }
     еще {
        [imageview removeFromSuperview];
     }
 }

То, что вы пытаетесь сделать, будет работать только тогда, когда у вас есть ресурсы двух типов для всех ваших изображений. 1) Само изображение 2) Изображение с отмеченным ящиком как прозрачный слой.

  • Вход в систему Google с помощью входа в Facebook
  • Именование приложения iOS для отправки
  • Ошибка вызова сценария оболочки Cocoa
  • Предупреждение отсутствующих файлов из Pods
  • Максимальная скорость от IOS / iPad / iPhone
  • как получить точное текущее местоположение на карте здания
  • Устранение заданий CocoaPods отменяет предупреждения для компиляторов
  • Защита паролем приложения для iPhone
  • Как решить ошибку LLVM 5.0 для Apple в xcode 5?
  • Подача с Xcode 6 на iTunes Connect вызывает ошибку ITMS-4088
  • Как я могу вручную переключаться между UIViewControllers в раскадровке?
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.