0

アプリで BCGieEffect を使用したいと考えています。github からデモの例をダウンロードします。https://github.com/Ciechan/BCGenieEffect

この例では xib が使用され、4 つの UIButtons が xib と共に使用されます。このコードを xib なしで 1 つのボタンのみに使用したい。ビューをドラッグしたくないので、そのコードを削除します。

UIButton が 1 つあります。

UIButton *Pop_Hidebtn = [[UIButton alloc]initWithFrame:CGRectMake(290, 5, 15, 15)];
Pop_Hidebtn.backgroundColor = [UIColor clearColor];
[Pop_Hidebtn setImage:[UIImage imageNamed:@"close.png"] forState:UIControlStateNormal];

Pop_Hidebtn.titleLabel.textColor = [UIColor blueColor];
[Pop_Hidebtn addTarget:self action:@selector(Hidden_pop:)  forControlEvents:UIControlEventTouchUpInside];  
[popup_View addSubview:Pop_Hidebtn];


-(void)Hidden_pop:(UIButton *)sender{
    [self genieToRect:sender.frame edge:BCRectEdgeBottom];
}


// I modified this and it says-> UIButton may not respond to enumerateobjectsusingblock
// And Crash 

- (void) genieToRect: (CGRect)rect edge: (BCRectEdge) edge {
    NSTimeInterval duration = 3.0;

    CGRect endRect = CGRectInset(rect, 5.0, 5.0);

    [help_Button enumerateObjectsUsingBlock:^(UIButton *button, NSUInteger idx, BOOL   *stop) { 
        help_Button.enabled = NO;
    }];


    if (self.viewIsIn) {

        [popup_View_under2 genieOutTransitionWithDuration:duration startRect:endRect      startEdge:edge completion:^{
            popup_View_under2.userInteractionEnabled = YES;

            [help_Button enumerateObjectsUsingBlock:^(UIButton *button, NSUInteger idx,  BOOL  *stop) {
                help_Button.enabled = YES;

            }];
        }];

    } else {
        popup_View_under2.userInteractionEnabled = NO;

        //UIButton may not respond to enumerateobjectsusingblock
        // Crash on this line
        [popup_View_under2 genieInTransitionWithDuration:duration destinationRect:endRect      destinationEdge:edge completion: ^{
            [help_Button enumerateObjectsUsingBlock:^(UIButton *button, NSUInteger idx,  BOOL *stop) {
                button.enabled = YES;
            }];
        }];
    }

    self.viewIsIn = ! self.viewIsIn;
}

どうすればこの問題を解決できますか?

4

1 に答える 1

0
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block

NSArrayNSOrderedSetおよびNSSetクラスのインスタンス メソッドです。したがって、 のインスタンスであると想定するものに対してそのメソッドを呼び出すと、機能しませんUIButton

このメソッドは、コレクション内のオブジェクトを列挙するために使用することを目的としています。したがって、次のようにボタンをNSArray(またはNSMutableArray) に配置する必要があります。

[myButtons enumerateObjectsUsingBlock:^(UIButton *aButton, NSUInteger idx, BOOL   *stop) { 
    aButton.enabled = NO;
}];

ブロックは、配列内のすべてのオブジェクトに対して呼び出されmyButtons、オブジェクト自体 (この場合は にキャストされUIButton *ます)、そのオブジェクトのインデックスBOOL、ループを早期に終了するために使用できる へのポインターを受け取ります。

ボタンを 1 つだけ使用すると言ったので、そのメソッド呼び出しを削除して使用しないでください。

helpButton.enabled = YES;

列挙せずに?

于 2013-01-25T09:31:07.273 に答える