未调用UIAlertView clickedButtonAtIndex方法

时间:2013-04-25 11:44:09

标签: ios objective-c uialertview

<。>文件中的

@interface MenuViewController : UIViewController<UIAlertViewDelegate>
<。>文件中的

@interface TACDIYMenuViewController ()

@end

@implementation TACDIYMenuViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    return 1;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return [self.imageViews count];
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
    CGSize size = CGSizeMake(200, 100);
    return size;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    MenuViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MenuViewCellIdentifier" forIndexPath:indexPath];
    if ([indexPath row] < [self.imageViews count]) {
        cell.thumbnails.image = [self.imageViews objectAtIndex:[indexPath row]];
    } else {
        cell.thumbnails.image = [UIImage imageNamed:@"addMark.png"];
    }

    return cell;
}

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
    [self doSomething];
}

- (void)doSomething{
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Warning"
                                                    message:@"Are you sure"
                                                   delegate:self
                                          cancelButtonTitle:@"NO"
                                          otherButtonTitles:@"YES",nil];
    [alert show];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if(buttonIndex == 0){
        NSLog(@"0");
    } else {
        NSLog(@"1");
    }
}

@end

然而,clickedButtonAtIndex没有被调用。它是怎么发生的?
顺便说一下,MenuViewController中的视图是另一个类的子视图,它还有一个UIAlertView和clickedButtonAtIndex方法。但它运作良好。

3 个答案:

答案 0 :(得分:6)

如果在单击AlertView上的按钮之前取消分配了委托对象(在您的情况下为TACDIYMenuViewController的实例),则可能会发生这种情况。

答案 1 :(得分:1)

替换

@interface MenuViewController : UIViewController<UIAlertViewDelegate>

使用

@interface TACDIYMenuViewController : UIViewController<UIAlertViewDelegate>

然后它应该工作。

答案 2 :(得分:-4)

请在[alert show]之前添加此行; alert.delegate = Self;