1

我有一个自定义的 ImagePicker。AUIScrollView带有我的图像,NSDocumentDirectory然后我将按钮添加为我的图像框架,就像缩略图视图一样。我添加的是当它被选中然后关闭时,下次视图加载/出现/显示时,它将已经有一个图像复选标记。没关系。但我需要的是,当我点击一个图像时,它已经被选中或图像“复选标记”将显示,然后当我点击同一个图像时,复选标记将消失。

这是我拥有的代码的解释:

// UISCrollView

- (void)viewDidLoad {

    // 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];
        } 
}

// 当按钮被点击时

- (IBAction)buttonClicked:(id)sender {
    myButton = (UIButton *)sender;
    self.selectedImage = [_images objectAtIndex:myButton.tag];

    [[NSUserDefaults standardUserDefaults] setInteger:myButton.tag forKey:@"selected1"];

    [self dismissModalViewControllerAnimated:NO];
}

// 选择按钮时的方法

   - (void)turnButtonToSelected
    {
        UIImage *bgImage = [UIImage imageNamed:@"Checkmark.png"];
        [myButton setBackgroundImage:bgImage forState:UIControlStateNormal];
        [myButton setBackgroundImage:bgImage forState:UIControlStateHighlighted];
        [myButton setBackgroundImage:bgImage forState:UIControlStateDisabled];
        [myButton setEnabled:NO];
    }
4

3 回答 3

0

为按钮是否被选中保留一个布尔值。在您的界面中保留一个名为BOOL selected;Keep track of the value 的布尔变量,并设法保存它。然后在您的 turnButtonToSelected 方法中添加:

- (void)turnButtonToSelected
{
   selected = !selected;
   if (selected)
   {
      UIImage *bgImage = [UIImage imageNamed:@"Checkmark.png"];
      [myButton setBackgroundImage:bgImage forState:UIControlStateNormal];
      [myButton setBackgroundImage:bgImage forState:UIControlStateHighlighted];
      [myButton setBackgroundImage:bgImage forState:UIControlStateDisabled];
   }
   else
   {
      // set button image without the check mark
   }
}

这将确保,如果之前选择了该按钮,现在再次点击该复选标记将消失。

于 2012-07-23T08:32:29.597 回答
0

首先,您需要保留选定的图像索引,因此创建一个 selectedImageIndex 实例变量。
然后在 viewDidLoad 中不需要调用

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSInteger selectedImageSlot1 = [prefs integerForKey:@"selected1"];  

在 for 循环中...
将其放在 for 循环之前,并将所选图像索引存储在 selectedImageIndex 中。

- (void)viewDidLoad {

    // Create view
    UIScrollView *view = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f,0.0f,1024.0f,768.0f)];

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    self.selectedImageIndex = [prefs integerForKey:@"selected1"];

    int row = 0;
    int column = 0;
    for(int i = 0; i < _thumbs.count+1; ++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+1; 
        NSLog(@"%i",i);


        if (self.selectedImageIndex == myButton.tag){
            [self turnButtonToSelected:myButton];
        } 
}  

删除该行[myButton setEnabled:NO];turnButtonToSelected以便用户可以重新点击按钮以取消选择它。将 turnButtonToSelected 更改为:

   - (void)turnButtonToSelected:(UIButton *)button
    {
        UIImage *bgImage = [UIImage imageNamed:@"Checkmark.png"];
        [button setBackgroundImage:bgImage forState:UIControlStateNormal];
        [button setBackgroundImage:bgImage forState:UIControlStateHighlighted];
        [button setBackgroundImage:bgImage forState:UIControlStateDisabled];
    }    

    - (void)turnButtonToDeselected:(UIButton *)button
    {
        UIImage *bgImage = [UIImage imageNamed:@"Not-Checkmark.png"];
        [button setBackgroundImage:bgImage forState:UIControlStateNormal];
        [button setBackgroundImage:bgImage forState:UIControlStateHighlighted];
        [button setBackgroundImage:bgImage forState:UIControlStateDisabled];
    }

然后,当用户点击图像时,您检查当前是否选择了该图像。
如果是的话-你打电话turnButtonToDeselected
如果没有 - 你打电话turnButtonToSelected

- (IBAction)buttonClicked:(id)sender {
    myButton = (UIButton *)sender;
    self.selectedImage = [_images objectAtIndex:myButton.tag - 1];

    [[NSUserDefaults standardUserDefaults] setInteger:myButton.tag forKey:@"selected1"];

    if (myButton.tag == self.selectedImageIndex) {
        // user tap on a button that was selected, so we need to deselect it 
        [self turnButtonToDeselected:myButton];
    }
    else {
        // user tap on a button that wasn't selected

        // first we check if there is a selected button, if yes we need to deselect it
        if (self.selectedImageIndex > 0) {
            // get the selected button
            UIButton *selectedButton = (UIButton *)[self.view viewWithTag:self.selectedImageIndex];
            // deselect it
            [self turnButtonToDeselected:selectedButton];
        }

        // now we can select the button the user tapped on
        [self turnButtonToSelected:myButton];


        // save the selected index
        self.selectedImageIndex = myButton.tag;
    }
}

还有一件事,在 viewDidLoad 中将按钮标签设置为 i+1

于 2012-07-23T09:27:17.933 回答
0

您需要创建按钮数组。当按钮单击事件时,您需要检查按钮是否设置了复选标记图像。

-(IBAction)buttonclickevent:(id)sender{

  UIButton *btn=sender;

  UIButton *currentbutton=[ButtonArray objectAtIndex:btn.tag];


 if([currentbutton.currentImage isEqual:[UIImage imageNamed:@"Checkmark.png"]])

  [currentbutton setImage:[UIImage imageNamed:@"normal.png"]forState:UIControlStateNormal];

}
else {

  [currentbutton setImage:[UIImage imageNamed:@"Checkmark.png"]forState:UIControlStateNormal];
}

}
于 2012-07-23T10:19:12.793 回答