【问题标题】:Calling a function from another class with Logos (%hook)使用 Logos (%hook) 从另一个类调用函数
【发布时间】:2013-03-08 21:22:24
【问题描述】:

注意:此代码不是原始代码的精确复制品,而是说明(非常准确)问题所在,以及我对代码的意图是什么。

我在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 在DaClass1 中时,我如何从我的UIButtonaction: 中调用DaClass2 中的dismissWithAnimation

【问题讨论】:

    标签: function ios6 jailbreak theos logos


    【解决方案1】:

    您可以创建一个%new 函数,在DaClass2 中调用dismissWithAnimation

    %hook DaClass1
    
    //Your Code...
    
    %new
    
    -(void)dismissIt {
        [[%c(DaClass2) sharedInstance] dismissWithAnimation:YES:nil];
    }
    
    %end
    

    并将xButtonaction: 设置为“dismissIt”:

    [xButton addTarget:self action:@selector(dismissIt) forControlEvents:UIControlEventTouchUpInside];
    

    【讨论】:

      【解决方案2】:

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

      然后做:

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

      【讨论】:

      • 它必须是 DaClass2 的实例,除非它是类方法。
      • 或持有对 DaClass2 实例的引用,声明一个本地按钮按下处理程序方法,并在该方法中,对该 DaClass2 对象调用您的 dismissWithAnimation 方法。
      猜你喜欢
      • 2013-07-04
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 2013-04-14
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多