如何制作我的UISwitch通话方法(我使用theos)

时间:2014-09-04 05:05:17

标签: ios objective-c iphone uiswitch theos

我希望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

2 个答案:

答案 0 :(得分:1)

如果你想要做的就是在切换开关时调用一个方法,那就在交换机上添加一个目标

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

然后实现你的方法将switch作为一个参数,这样你就可以在切换时获得状态:

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

答案 1 :(得分:0)

试试这个:

viewDidLoad中:

self.mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(10, 10, 51, 31)];
[self.mySwitch addTarget:self action:@selector(changeInSwitch:)   forControlEvents:UIControlEventValueChanged];
[self.view addSubview:self.mySwitch];

- (IBAction)changeInSwitch:(id)sender
{

if ([self forceMMS)
{
   NSLog(@"IN ON");
}
else
{
 NSLog(@"IN OFF");
 }

  }

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