我希望UISwitch出现在Messages.app(MobileSMS.app)的CKTranscriptConversationController中,并从类CKConversation调用方法forceMMS。它编译正常,但是当我启动messages.app时它崩溃了。有任何想法吗?

一旦启动Messages.app,它就会崩溃,当开关打开时,我要调用的是http://ghostbin.com/paste/3upv6并返回FALSE;当开关关闭时。我能够在没有该方法的情况下显示实际的开关,但是一旦将其放入代码中,它就会立即使应用程序崩溃。

码:

#import <UIKit/UIKit.h>
#import <ChatKit/CKConversation.h>

@interface CKTranscriptCollectionViewController : UIViewController
@property (nonatomic, strong) UISwitch *mySwitch;
@end

%hook CKTranscriptCollectionViewController

- (void)viewDidLoad {
    %orig;
    self.mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(10, 10, 51, 31)];
    [self.view addSubview:self.mySwitch];
}

-(BOOL)forceMMS {
    if ([self.mySwitch isOn]){
            return TRUE;
        } else {
            return FALSE;
        }
}

%end

最佳答案

如果您要做的只是在切换开关时调用方法,请向开关添加一个目标:

[mySwitch addTarget:self action:@selector(yourMethodHere:) forControlEvents:UIControlEventValueChanged];


然后实现您的方法以将开关作为参数,以便在切换状态时可以获取状态:

- (void)yourMethodHere:(UISwitch *)theSwitch {
    NSLog(@"The switch is %@.", theSwitch.isOn ? @"on" : @"off");
}

10-08 20:05