检测按下哪个UIButton - UIImageView

时间:2013-09-14 08:03:29

标签: iphone ios objective-c uiimageview uibutton

我正在编写一个包含2个UIImageViews和2个UIButtons的简单应用程序。 UIImageViews放在UIButtons的顶部。

我有一个随机UIImageView上出现的UIImage,并在2秒后消失。然后用户必须点击他们认为图像出现的按钮。

我随机播放UIImageView数组并使用第一个元素(索引0)来显示图像。当改组时,我会跟踪哪个元素(即从索引“n”中的哪个索引)放在数组的索引0上。

然而,当按下按钮时,我将按下的按钮的id与带有索引n的按钮的id进行比较。 (因为那是随机UIImageView的索引)。 但由于某种原因它不起作用。 :(

这是我的代码:(我没有上传.h文件。它只包含声明。) 以下代码不会产生任何错误/警告消息。它只是不输出我想要的结果。

@interface ViewController ()
@property (strong, nonatomic) NSMutableArray* tempButton;
@property (strong, nonatomic) NSMutableArray *tempViews;
@property (strong, nonatomic) UIImage *myImage;
@end

@implementation ViewController



- (void)viewDidLoad
{
    [super viewDidLoad];

     _myImage = [UIImage imageNamed:@"hello"];
    _tempButton = [[NSMutableArray alloc] initWithObjects:_button1, _button2, nil];

    _tempViews = [[NSMutableArray alloc]initWithObjects:_image1, _image2, nil];


     [self displayonView];

}



-(void)displayToFindSymbol{
    [_toFindImage setImage:_myImage];
    _toFindImage.contentMode = UIViewContentModeScaleAspectFit;
}

- (IBAction)pressed:(id)sender {

    UIButton *result = (UIButton *)sender;
    if (result == _tempButton[_correctButton]) {
       NSLog (@"Correct");
    }
    else if (result != _tempButton[_correctButton]){
       NSLog (@"Incorrect");            

    }

}



-(NSMutableArray *)shuffleViews{
    NSUInteger count = _tempViews.count;
    int n;
    for (int i=count-1; i>=0; --i) {

        n = arc4random()  % (i + 1);


        [_tempViews exchangeObjectAtIndex:n withObjectAtIndex:i];
    }
    _correctButton = n;
    return _tempViews;

}

-(void)displayonView{

    NSMutableArray *tempArray;
    tempArray = [self shuffleViews]; // shuffle views

     _correctImage = [tempArray objectAtIndex:0];

    _correctImage.contentMode = UIViewContentModeScaleAspectFit;

    [_correctImage setImage:_myImage];

    NSTimer* myTImer;
    myTImer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(hideLabel) userInfo:nil repeats:NO];

}

-(void) hideLabel{
    _correctImage.hidden = YES;
    for (UIButton *each in self.tempButton) {
        each.enabled = YES;
    }
    [self displayToFindSymbol];
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

2 个答案:

答案 0 :(得分:0)

您可以让每个按钮调用与选择器不同的方法,或者为每个按钮分配不同的标签,并以共享方法检查它。

答案 1 :(得分:0)

添加数组中的所有图像视图以及数组中的所有按钮。

将图像设置为随机图像视图时,将其索引存储起来并稍后使用索引来获取应该单击的相应按钮。

伪代码

NSArray a = [NSArray arrayWithObjects:imgVie1,ImgView2...,nil]
// create second array with buttons 

int randomIndex = arc4random() % a.count;
UIImageView *imgView = [a objectAtIndex:randomIndex];
//set image and hide later

UIButton *correctButton = [secondarray objectAtIndex:randomIndex];