2

注:このコードは元のコードを正確に複製したものではありませんが、問題の内容とコードに対する私の意図を (正確に) 示しています。

DaClass1のビューにボタンを追加しました(これは正常に動作します):

%hook DaClass1

-(id)DaView {
    UIButton *xButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [xButton addTarget:self action:@selector(dismissWithAnimation:YES:nil)
      forControlEvents:UIControlEventTouchUpInside];
    [xButton setBackgroundImage:[UIImage imageWithContentsOfFile:@"/Hello.png"] forState:UIControlStateNormal];
    xButton.frame = CGRectMake(0, 0, 30, 30);
    [self addSubview:xButton];
    return %orig;
}

%end

しかし、( ) は実際には別のクラスのものですUIButtonaction:dismissWithAnimation:YES:nil

%hook DaClass2
    -(void)dismissWithAnimation:(int) reason:(int) {
        //someCodeHere...
    }
%end

UIButton が にあるときに、自分のから呼び出すdismissWithAnimationにはどうすればよいですか?DaClass2UIButtonaction:DaClass1

4

2 に答える 2

2

%newを呼び出す関数をdismissWithAnimation作成できますDaClass2

%hook DaClass1

//Your Code...

%new

-(void)dismissIt {
    [[%c(DaClass2) sharedInstance] dismissWithAnimation:YES:nil];
}

%end

を " xButton"に設定します。action:dismissIt

[xButton addTarget:self action:@selector(dismissIt) forControlEvents:UIControlEventTouchUpInside];
于 2013-03-09T20:46:44.707 に答える
1

@selector(dismissWithAnimation:YES:nil)メソッドがクラスDaClass2にあるということですか?

次に、次のことを行います。

[xButton addTarget:(instance of DaClass2) action:@selector(dismissWithAnimation:YES:nil) forControlEvents:UIControlEventTouchUpInside];
于 2013-03-08T21:28:52.173 に答える