使用Logos从另一个类调用函数(%hook)

时间:2013-03-08 21:22:24

标签: function ios6 jailbreak theos logos

注意:此代码不是原始代码的精确副本,但说明(准确性很高)问题是什么,以及我对代码的意图是什么。

我在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

UIButton的{​​{1}}(action:)实际上来自另一个类:

dismissWithAnimation:YES:nil

当UIButton位于%hook DaClass2 -(void)dismissWithAnimation:(int) reason:(int) { //someCodeHere... } %end 时,如何通过dismissWithAnimation的{​​{1}} DaClass2致电UIButton

2 个答案:

答案 0 :(得分:2)

您可以在%new中设置dismissWithAnimation来调用DaClass2的功能。

%hook DaClass1

//Your Code...

%new

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

%end

并将xButton的{​​{1}}设置为“action:”:

dismissIt

答案 1 :(得分:1)

你的意思是@selector(dismissWithAnimation:YES:nil)方法在DaClass2类中吗?

然后做:

[xButton addTarget:(instance of DaClass2) action:@selector(dismissWithAnimation:YES:nil) forControlEvents:UIControlEventTouchUpInside];