1

カスタム ImagePicker があります。UIScrollView私の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;インターフェイスで、「値を追跡する」という名前のブール変数を保持し、それをなんとか保存します。次に、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];から行を削除します。turnButtonToSelectedturnButtonToSelectedを次のように変更します。

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

次に、ユーザーが画像をタップすると、この画像が現在選択されているかどうかを確認します。
はいの場合-uは呼び出しますturnButtonToDeselected
いいえの場合-uは呼び出します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;
    }
}

もう1つ、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 に答える